Skróty dostarczają użytkownikom określone typy treści, pomagając im szybko uzyskać dostęp do części aplikacji.
Sposób dostarczania treści za pomocą skrótów zależy od przypadku użycia i tego, czy kontekst skrótu jest określany przez aplikację czy przez użytkownika. Chociaż kontekst skrótu statycznego się nie zmienia, a kontekst skrótu dynamicznego stale się zmienia, w obu przypadkach kontekst jest określany przez aplikację. W przypadkach, gdy użytkownik wybiera sposób, w jaki aplikacja dostarcza mu treści, np. za pomocą przypiętego skrótu, kontekst jest definiowany przez użytkownika. Poniższe scenariusze opisują kilka przypadków użycia poszczególnych typów skrótów:
- Skróty statyczne najlepiej sprawdzają się w aplikacjach, które linkują do treści o spójnej strukturze przez cały czas interakcji użytkownika z aplikacją. Ponieważ większość programów uruchamiających wyświetla tylko 4 skróty naraz, skróty statyczne są przydatne do wykonywania rutynowych zadań w spójny sposób, np. gdy użytkownik chce wyświetlić kalendarz lub e-maila w określony sposób.
- Skróty dynamiczne są używane do działań w aplikacjach, które są zależne od kontekstu. Skróty zależne od kontekstu są dostosowane do działań wykonywanych przez użytkowników w aplikacji. Jeśli na przykład tworzysz grę, która pozwala użytkownikowi rozpocząć od bieżącego poziomu, musisz często aktualizować skrót. Użycie skrótu dynamicznego pozwala aktualizować skrót za każdym razem, gdy użytkownik ukończy poziom.
- Przypięte skróty są używane do wykonywania określonych działań przez użytkownika. Użytkownik może na przykład przypiąć do menu z aplikacjami określoną witrynę. Jest to korzystne, ponieważ umożliwia użytkownikowi wykonanie działania niestandardowego, np. przejście do witryny w jednym kroku, szybciej niż w przypadku domyślnej instancji przeglądarki.
Tworzenie skrótów statycznych
Skróty statyczne zawierają linki do ogólnych działań w aplikacji, które muszą pozostać niezmienione przez cały okres obowiązywania bieżącej wersji aplikacji. Dobrymi opcjami skrótów statycznych są wyświetlanie wysłanych wiadomości, ustawianie alarmu i wyświetlanie aktywności fizycznej użytkownika w danym dniu.
Aby utworzyć skrót statyczny, wykonaj te czynności:
- W pliku
AndroidManifest.xmlaplikacji znajdź aktywność, której filtry intencji są ustawione na działanieandroid.intent.action.MAINi kategorięandroid.intent.category.LAUNCHER. Dodaj do tej aktywności element
<meta-data>, który odwołuje się do pliku zasobów, w którym zdefiniowane są skróty aplikacji:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ... > <activity android:name="Main"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" /> </activity> </application> </manifest>Utwórz nowy plik zasobów o nazwie
res/xml/shortcuts.xml.W nowym pliku zasobów dodaj element główny
<shortcuts>, który zawiera listę elementów<shortcut>. W każdym elemencie<shortcut>podaj informacje o skrócie statycznym, w tym jego ikonę, etykiety opisu i intencje, które uruchamia w aplikacji:<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:shortcutId="compose" android:enabled="true" android:icon="@drawable/compose_icon" android:shortcutShortLabel="@string/compose_shortcut_short_label1" android:shortcutLongLabel="@string/compose_shortcut_long_label1" android:shortcutDisabledMessage="@string/compose_disabled_message1"> <intent android:action="android.intent.action.VIEW" android:targetPackage="com.example.myapplication" android:targetClass="com.example.myapplication.Main" /> <!-- If your shortcut is associated with multiple intents, include them here. The last intent in the list determines what the user sees when they launch this shortcut. --> <categories android:name="android.shortcut.conversation" /> <capability-binding android:key="actions.intent.CREATE_MESSAGE" /> </shortcut> <!-- Specify more shortcuts here. --> </shortcuts>
Dostosowywanie wartości atrybutów niestandardowych
Poniższa lista zawiera opisy różnych atrybutów skrótu statycznego. Podaj wartość dla atrybutów android:shortcutId i android:shortcutShortLabel. Wszystkie inne wartości są opcjonalne.
android:shortcutIdLiterał ciągu znaków, który reprezentuje skrót, gdy obiekt
ShortcutManagerwykonuje na nim operacje.android:shortcutShortLabelZwięzłe sformułowanie opisujące cel skrótu. Jeśli to możliwe, ogranicz ten krótki opis do 10 znaków.
Więcej informacji znajdziesz w artykule
setShortLabel().android:shortcutLongLabelRozszerzona fraza opisująca cel skrótu. Jeśli jest wystarczająco dużo miejsca, program uruchamiający wyświetla tę wartość zamiast
android:shortcutShortLabel. Jeśli to możliwe, ogranicz długi opis do 25 znaków.Więcej informacji znajdziesz w artykule
setLongLabel().android:shortcutDisabledMessageKomunikat, który pojawia się w obsługiwanym programie uruchamiającym, gdy użytkownik próbuje uruchomić wyłączony skrót. Komunikat musi wyjaśniać użytkownikowi, dlaczego skrót jest wyłączony. Wartość tego atrybutu nie ma wpływu, jeśli
android:enabledtotrue.android:enabledOkreśla, czy użytkownik może korzystać ze skrótu z obsługiwanego programu uruchamiającego. Wartość domyślna
android:enabledtotrue. Jeśli ustawisz wartośćfalse, ustaw teżandroid:shortcutDisabledMessage, aby wyjaśnić, dlaczego wyłączasz skrót. Jeśli uważasz, że nie musisz podawać takiej wiadomości, całkowicie usuń skrót z pliku XML.android:iconBitmapa lub ikona adaptacyjna, której program uruchamiający używa podczas wyświetlania skrótu użytkownikowi. Ta wartość może być ścieżką do obrazu lub pliku zasobu, który zawiera obraz. Jeśli to możliwe, używaj ikon adaptacyjnych, aby zwiększyć wydajność i spójność.
Konfigurowanie elementów wewnętrznych
Plik XML zawierający listę skrótów statycznych aplikacji obsługuje te elementy wewnątrz każdego elementu <shortcut>. Musisz uwzględnić element wewnętrzny intent dla każdego zdefiniowanego skrótu statycznego.
intentDziałanie, które system uruchamia, gdy użytkownik wybierze skrót. Ta intencja musi podawać wartość atrybutu
android:action.Możesz podać wiele intencji dla jednego skrótu. Szczegółowe informacje znajdziesz w sekcjach Zarządzanie wieloma intencjami i aktywnościami i Ustawianie intencji oraz w dokumentacji klasy
TaskStackBuilder.categoriesUmożliwia grupowanie typów działań wykonywanych przez skróty aplikacji, takich jak tworzenie nowych wiadomości na czacie.
Listę obsługiwanych kategorii skrótów znajdziesz w dokumentacji klasy
ShortcutInfo.capability-bindingDeklaruje funkcję powiązaną ze skrótem.
W poprzednim przykładzie skrót jest połączony z funkcją zadeklarowaną dla
CREATE_MESSAGE, która jest wbudowaną intencją akcji w aplikacji. To powiązanie funkcji umożliwia użytkownikom używanie poleceń głosowych w Asystencie Google do wywoływania skrótu.
Tworzenie skrótów dynamicznych
Skróty dynamiczne zawierają linki do konkretnych, zależnych od kontekstu działań w aplikacji. Te działania mogą się zmieniać między kolejnymi uruchomieniami aplikacji i podczas jej działania. Skróty dynamiczne dobrze sprawdzają się w przypadku dzwonienia do konkretnej osoby, nawigowania do określonej lokalizacji i wczytywania gry od ostatniego zapisu. Możesz też używać skrótów dynamicznych, aby otwierać rozmowy.
Biblioteka Jetpack ShortcutManagerCompat jest pomocnikiem interfejsu API ShortcutManager, który umożliwia zarządzanie skrótami dynamicznymi w aplikacji. Korzystanie z biblioteki ShortcutManagerCompat zmniejsza ilość powtarzalnego kodu i pomaga zapewnić spójne działanie skrótów w różnych wersjach Androida. Ta biblioteka jest też wymagana do przekazywania skrótów dynamicznych, aby mogły się one wyświetlać na platformach Google, takich jak Asystent, za pomocą biblioteki integracji skrótów Google.
Interfejs API ShortcutManagerCompat umożliwia aplikacji wykonywanie tych operacji za pomocą skrótów dynamicznych:
- Przesyłanie i aktualizowanie: użyj
pushDynamicShortcut(), aby publikować i aktualizować skróty dynamiczne. Jeśli istnieją już skróty dynamiczne lub przypięte o tym samym identyfikatorze, każdy skrót zmienny zostanie zaktualizowany. - Usuń:usuń zestaw skrótów dynamicznych za pomocą metody
removeDynamicShortcuts(). Usuń wszystkie skróty dynamiczne za pomocą metodyremoveAllDynamicShortcuts().
Więcej informacji o wykonywaniu operacji na skrótach znajdziesz w artykule Zarządzanie skrótami i w dokumentacji ShortcutManagerCompat.
Oto przykład tworzenia skrótu dynamicznego i powiązania go z aplikacją:
val shortcut = ShortcutInfoCompat.Builder(context, "id1") .setShortLabel("Website") .setLongLabel("Open the website") .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website)) .setIntent( Intent( Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/") ) ) .build() ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)
Dodawanie biblioteki integracji skrótów Google
Biblioteka integracji skrótów Google to opcjonalna biblioteka Jetpack. Umożliwia on przesyłanie skrótów dynamicznych, które mogą być wyświetlane na platformach Androida, takich jak program uruchamiający, oraz na platformach Google. Dzięki tej bibliotece użytkownicy mogą odkrywać skróty, które pozwalają im szybko uzyskiwać dostęp do określonych treści lub powtarzać działania w aplikacji.
Skróty dynamiczne przekazywane za pomocą tej biblioteki nie podlegają limitom skrótów obowiązującym na poszczególnych urządzeniach. Dzięki temu aplikacja może przekazywać skrót za każdym razem, gdy użytkownik wykona powiązane działanie w aplikacji. Przekazywanie częstych skrótów w ten sposób pozwala Google zrozumieć wzorce korzystania z aplikacji przez użytkownika i sugerować mu skróty odpowiednie do kontekstu.
Asystent może na przykład dowiedzieć się ze skrótów przesłanych przez aplikację do śledzenia aktywności, że użytkownik zwykle biega rano, i proaktywnie zasugerować skrót „rozpocznij bieg”, gdy użytkownik rano weźmie telefon do ręki.
Biblioteka integracji skrótów Google nie oferuje żadnych funkcji, które można wywołać. Dodanie tej biblioteki do aplikacji umożliwia platformom Google odbieranie skrótów, które aplikacja przesyła za pomocą ShortcutManagerCompat.
Aby używać tej biblioteki w aplikacji, dodaj zależności dla biblioteki integracji skrótów Google i ShortcutManagerCompat do pliku app/build.gradle lub app/build.gradle.kts:
Kotlin
dependencies {
implementation("androidx.core:core:1.6.0")
implementation("androidx.core:core-google-shortcuts:1.0.0")
}
Dynamiczny
dependencies {
implementation "androidx.core:core:1.6.0"
implementation 'androidx.core:core-google-shortcuts:1.0.0'
}
Po dodaniu zależności biblioteki do projektu aplikacji na Androida aplikacja może używać metody pushDynamicShortcut() z ShortcutManagerCompat do przekazywania skrótów dynamicznych, które mogą być wyświetlane w menu z aplikacjami i na odpowiednich platformach Google.
Tworzenie przypiętych skrótów
Na Androidzie 8.0 (poziom interfejsu API 26) i nowszych możesz tworzyć przypięte skróty. W odróżnieniu od skrótów statycznych i dynamicznych skróty przypięte wyświetlają się w obsługiwanych programach uruchamiających jako osobne ikony. Rysunek 1 przedstawia różnicę między tymi 2 typami skrótów.
Aby przypiąć skrót do obsługiwanego programu uruchamiającego za pomocą aplikacji, wykonaj te czynności:
- Użyj
isRequestPinShortcutSupported(), aby sprawdzić, czy domyślny program uruchamiający urządzenia obsługuje przypinanie aplikacji skrótów w aplikacji. Utwórz obiekt
ShortcutInfoCompatzawierający identyfikator, intencję i krótką etykietę skrótu. Jeśli skrót istnieje, użyj identyfikatora istniejącego skrótu. System automatycznie znajduje i przypina wszystkie inne informacje związane ze skrótem.Przypnij skrót do programu uruchamiającego na urządzeniu, wywołując funkcję
requestPinShortcut(). Podczas tego procesu możesz przekazać obiektPendingIntent, który powiadomi aplikację tylko wtedy, gdy skrót zostanie przypięty.Po przypięciu skrótu aplikacja może zaktualizować jego zawartość za pomocą metody
updateShortcuts(). Więcej informacji znajdziesz w artykule Aktualizowanie skrótów.
Poniższy fragment kodu pokazuje, jak utworzyć przypięty skrót:
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { // Enable the existing shortcut with the ID "my-shortcut". val pinShortcutInfo = ShortcutInfoCompat.Builder(context, "my-shortcut") .setShortLabel("Website") .setIntent( Intent( Intent.ACTION_VIEW, Uri.parse("https://www.mysite.example.com/") ) ) .build() // Create the PendingIntent object only if your app needs to be notified // that the user let the shortcut be pinned. If the pinning operation fails, // your app isn't notified. Assume here that the app implements a method // called createShortcutResultIntent() that returns a broadcast intent. val pinnedShortcutCallbackIntent = ShortcutManagerCompat.createShortcutResultIntent(context, pinShortcutInfo) // Configure the intent so that your app's broadcast receiver gets the // callback successfully. For details, see PendingIntent.getBroadcast(). val successCallback = PendingIntent.getBroadcast( context, /* request code */ 0, pinnedShortcutCallbackIntent, /* flags */ PendingIntent.FLAG_IMMUTABLE ) ShortcutManagerCompat.requestPinShortcut( context, pinShortcutInfo, successCallback.intentSender ) }
Tworzenie niestandardowego skrótu do aktywności
Możesz też utworzyć specjalną aktywność, która pomoże użytkownikom tworzyć skróty, wraz z opcjami niestandardowymi i przyciskiem potwierdzenia. Rysunek 2 przedstawia przykład tego typu aktywności w aplikacji Gmail.
W pliku manifestu aplikacji dodaj ACTION_CREATE_SHORTCUT do elementu <intent-filter> aktywności. Ta deklaracja konfiguruje następujące zachowanie, gdy użytkownik próbuje utworzyć skrót:
- System uruchamia specjalną aktywność aplikacji.
- Użytkownik ustawia opcje skrótu.
- Użytkownik klika przycisk potwierdzenia.
- Aplikacja tworzy skrót za pomocą metody
createShortcutResultIntent(). Ta metoda zwraca obiektIntent, który aplikacja przekazuje z powrotem do wcześniej wykonywanej aktywności za pomocą metodysetResult(). - Aplikacja wywołuje metodę
finish()w aktywności używanej do utworzenia skrótu niestandardowego.
Podobnie aplikacja może prosić użytkowników o dodanie przypiętych skrótów do ekranu głównego po instalacji lub przy pierwszym uruchomieniu. Ta metoda jest skuteczna, ponieważ pomaga użytkownikom utworzyć skrót w ramach ich zwykłego przepływu pracy.
Skróty testowe
Aby przetestować skróty aplikacji, zainstaluj ją na urządzeniu z menu z aplikacjami, które obsługuje skróty. Następnie wykonaj te czynności:
- Naciśnij i przytrzymaj ikonę programu uruchamiającego aplikację, aby wyświetlić zdefiniowane dla niej skróty.
- Przeciągnij skrót, aby przypiąć go do programu uruchamiającego na urządzeniu.