Po utworzeniu skrótów może być konieczne zarządzanie nimi przez cały okres do aplikacji. Możesz na przykład zoptymalizować aplikację, określając, jak często użytkownicy wykonują określone działania za pomocą skrótów. W innym przypadku możesz wyłączyć przypięty skrót, by uniemożliwić aplikacji wykonując nieaktualne lub brakujące działania. Skróty wymienione w rozmów, warto śledzić dane w celu uzyskania sygnałów, ranking skrótów.
Na tej stronie opisujemy te i kilka innych popularnych sposobów zarządzania skrótów.
Działanie skrótu
Poniższe sekcje zawierają ogólne informacje na temat działania skrótów, takie jak widoczność, kolejność wyświetlania i rankingi.
Widoczność skrótu
Skróty statyczne i dynamiczne pojawiają się w obsługiwanym programie uruchamiającym lub asystenta, gdy użytkownik wykona określony gest lub polecenie głosowe. Wł. obsługiwanych programach uruchamiających, gest polega na dotknięciu przytrzymaj ikonę launchera, ale może być on inny w innych aplikacjach z programem uruchamiającym. Z Google Asystenta, skróty mogą być wyświetlane w Asystencie lub uruchamiane przez użytkownika polecenie głosowe.
Klasa LauncherApps
udostępnia interfejsy API, do których mają dostęp aplikacje uruchamiające
skrótów.
Przypięte skróty pojawiają się w samym programie uruchamiającym, więc są zawsze widoczne. Przypięty skrót jest usuwany z programu uruchamiającego tylko w tych sytuacjach:
- Użytkownik je usuwa.
- Aplikacja powiązana ze skrótem zostanie odinstalowana.
- Użytkownik czyści dane aplikacji, wybierając kolejno Ustawienia > Aplikacje powiadomienia, wybierz aplikację i kliknij Pamięć > Wyczyść pamięć wewnętrzną.
Cele udostępniania są podzbiorem dynamicznych skrótów wyświetlanych w wierszu bezpośredniego udostępniania Arkusz udostępniania na Androidzie.
Kolejność wyświetlania skrótów
Gdy w Menu z aplikacjami wyświetlane są skróty aplikacji, muszą one występować w następujących sekcjach zamówienie:
- Skróty statyczne: skróty, których metoda
isDeclaredInManifest()
zwracatrue
. - Dynamiczne skróty: skróty, których
ShortcutInfo.isDynamic()
zwraca wartośćtrue
.
W każdym typie skrótów (statycznych i dynamicznych) skróty są sortowane w kolejności
ranking według wskaźnika ShortcutInfo.getRank
. Asystent Google,
uwzględnia także pozycję skrótu przy określaniu skrótów kontekstowych, które mają być wyświetlane.
użytkowników.
Rankingi to nieujemne, sekwencyjne liczby całkowite. Statyczne skróty są klasyfikowane od
na ostatnim miejscu w kolejności, w jakiej występują w pliku shortcuts.xml
. Reklamy dynamiczne
skrótów, możesz zaktualizować rankingi istniejących skrótów,
updateShortcuts(Context, List)
addDynamicShortcuts(Context, List)
,
pushDynamicShortcut(Context, ShortcutInfoCompat)
lub
setDynamicShortcuts(Context, List)
.
Kolejność udostępniania docelowych wartości zależy od różnych czynników, w tym od użytkownika w przeszłości
historia, czas od poprzedniej wizyty, częstotliwość,
wskazówka dotycząca pozycji,
wykorzystanie aplikacji oraz priorytet ustawiony dla rozmowy powiązanej z
skrót do udostępnienia. Udostępnij cele utworzone za pomocą
Udostępnianie skrótów API
mają wyższy priorytet niż docelowe wartości udziału generowane przez
ChooserTargetService
.
która została wycofana w Androidzie 11. Na Androidzie 12 i nowszych wartościach docelowych udziału
wygenerowanych przez wycofaną ChooserTargetService
nie będzie już wśród
arkusz udostępniania.
Większość programów uruchamiających wyświetla maksymalnie 4 skróty. Dla dowolnej kombinacji tych wartości ze skrótami statycznymi i dynamicznymi, które są zdefiniowane w programie uruchamiającym maksymalnie dwa skróty statyczne i dwa dynamiczne. Jeśli na przykład zdefiniować cztery skróty statyczne i automatycznie utworzyć trzy dynamiczne dwa pierwsze skróty statyczne, w programie uruchamiającym wyświetlają się o najwyższej pozycji w rankingu.
Zarządzanie wieloma intencjami i działaniami
Jeśli chcesz, aby aplikacja wykonywała wiele operacji, gdy użytkownik aktywuje możesz skonfigurować go tak, aby uruchamiał kolejne działania. Dostępne opcje można to osiągnąć, przypisując wiele intencji, rozpoczynając jedno działanie od lub ustawienie flag intencji w zależności od typu skrótu.
Przypisz wiele intencji
Tworząc skrót za pomocą ShortcutInfoCompat.Builder
, możesz użyć
setIntents()
zamiast setIntent()
. Łącząc się z firmą setIntents()
,
mogą uruchamiać różne działania w aplikacji po wybraniu skrótu przez użytkownika.
umieszczając wszystkie działania oprócz ostatniej na liście na stosie wstecznym. Jeśli
użytkownik klika przycisk Wstecz na urządzeniu, widzi inną aktywność w Twojej aplikacji
zamiast wracać do programu uruchamiającego.
Rozpoczynanie jednej aktywności od drugiej
Skróty statyczne nie mogą mieć niestandardowych flag intencji. Pierwsza intencja statycznego
skrót ma zawsze Intent.FLAG_ACTIVITY_NEW_TASK
i
Intent.FLAG_ACTIVITY_CLEAR_TASK
ustawienie. Oznacza to, że gdy aplikacja jest
uruchomionych, wszystkie dotychczasowe działania w aplikacji zostają zniszczone,
skrót został uruchomiony. Jeśli Ci nie odpowiada, możesz skorzystać z trampoliny
aktywność – niewidoczna aktywność, która rozpoczyna inną aktywność w
Activity.onCreate(Bundle)
, który wywołuje aplikację Activity.finish()
:
- W pliku
AndroidManifest.xml
umieść przypisanie atrybutuandroid:taskAffinity=
′′ na trampolinie. - W pliku zasobów skrótów znajdź aktywność na trampolinie w w postaci statycznego skrótu.
Więcej informacji o zajęciach na trampolinie znajdziesz w sekcji Rozpoczynanie jednej aktywności od innego.
Ustawianie flag intencji
Skróty dynamiczne możesz publikować z dowolnym zestawem flag Intent
.
Najlepiej podaj nazwę Intent.FLAG_ACTIVITY_CLEAR_TASK
wraz z innym
flagami. W przeciwnym razie, jeśli spróbujesz rozpocząć inne zadanie, gdy aplikacja będzie
aktywność docelowa może się nie pojawić.
Więcej informacji o zadaniach i flagach intencji znajdziesz w artykule Lista zadań i stos tylny.
Zaktualizuj skróty
Każda ikona uruchamiająca aplikację może zawierać maksymalnie kilka elementów statycznych i dynamicznych,
połączonych skrótów równa wartości zwracanej przez
getMaxShortcutCountPerActivity
Nie ma ograniczeń co do liczby
przypięte skróty, które aplikacja może utworzyć.
Gdy skrót dynamiczny jest przypięty, nawet jeśli wydawca usunie go jako
dynamiczny skrót, będzie on nadal widoczny i możliwy do uruchomienia. Dzięki temu
aplikacja ma więcej niż getMaxShortcutCountPerActivity()
skrótów.
Rozważmy poniższy przykład, w którym założono, że wartość zwracana przez funkcję
getMaxShortcutCountPerActivity()
to 4
:
- Aplikacja do obsługi czatu udostępnia 4 dynamiczne skróty, reprezentujące 4 najczęściej ostatnie rozmowy: c1, c2, c3 i c4.
- Użytkownik przypina wszystkie 4 skróty.
- Później użytkownik rozpoczyna 3 dodatkowe rozmowy: C5, c6 i c7. ponownie opublikuje swoje dynamiczne skróty. Nowy dynamiczny skrót (lista to: c4, c5, c6 i c7).
Aplikacja musi usunąć punkty c1, c2 i c3, ponieważ nie może wyświetlić więcej niż 4 dynamicznych skrótów. Jednak c1, c2 i c3 to nadal przypięte skróty, użytkownik może uzyskać dostęp i uruchomić aplikację.
Użytkownik ma wtedy dostęp do łącznie 7 skrótów, które prowadzą do aktywności w aplikacji wydawcy. Dzieje się tak, ponieważ suma uwzględnia maksymalną liczbę i 3 przypięte skróty.
- Aplikacja może używać uprawnienia
updateShortcuts(Context, List)
do aktualizowania dostępnych 7 skrótów. Możesz na przykład zaktualizować ten zestaw skrótów, gdy rozmówca na czacie zmieniają się ikony. - Za pomocą tych metod możesz:
addDynamicShortcuts(Context, List)
oraz Metody aktualizacji istniejących skrótów:setDynamicShortcuts(Context, List)
o takich samych identyfikatorach. Nie można ich jednak używać do aktualizacji niedynamicznych, przypięte skróty, bo te 2 metody próbują przekonwertować podane listy do skrótów dynamicznych.
Nie ma ograniczeń co do liczby skrótów, które można przekazać do wyświetlenia na
takich jak Asystent Google. Korzystanie z pushDynamicShortcut()
za pomocą biblioteki Jetpack ShortcutManagerCompat
, która tworzy i aktualizuje
skrótów do użycia w aplikacjach Asystenta. Dodaj też integrację ze skrótami Google
biblioteka do aplikacji, aby linki dynamiczne mogły wyświetlać się w Google.
Asystent.
Aby dowiedzieć się więcej o wskazówkach dotyczących skrótów do aplikacji, w tym o aktualizowaniu skrótów, zobacz Sprawdzone metody korzystania ze skrótów.
Obsługa zmian regionalnych
Aplikacje muszą zaktualizować dynamiczne i przypięte skróty po otrzymaniu
Komunikat Intent.ACTION_LOCALE_CHANGED
wskazujący zmianę w systemie
język.
Śledź użycie skrótów
Aby określić sytuacje, w których pojawiają się skróty statyczne i dynamiczne,
sprawdza historię aktywacji skrótów. W przypadku skrótów statycznych:
możesz śledzić, kiedy użytkownicy wykonują określone działania w aplikacji.
wywołując metodę reportShortcutUsed()
i przekazując jej identyfikator
skrótu, gdy wystąpi jedno z tych zdarzeń:
- Użytkownik wybiera skrót o podanym identyfikatorze.
- Użytkownik ręcznie wykonuje w aplikacji działanie odpowiadające ten sam skrót.
Aplikacja śledzi użycie skrótów dynamicznych, wywołując metodę
pushDynamicShortcut()
i przekazywanie jej identyfikatora skrótu, gdy
zaistnieje odpowiednie zdarzenie. Przekazywanie użycia skrótów dynamicznych za pomocą tej metody pozwala
aplikacje asystujące, takie jak Asystent Google, podpowiadają użytkownikom odpowiednie skróty.
Ponieważ metoda pushDynamicShortcut()
zgłasza użycie danych po jej wywołaniu, nie wywołaj
reportShortcutUsed()
dla tych samych skrótów.
W przypadku skrótów dotyczących rozmów ważne jest, aby śledzić użycie i przychodzących. Aby uzyskać szczegółowe informacje, zapoznaj się ze sprawdzonymi metodami dotyczącymi osób i rozmów.
Wyłącz skróty
Aplikacja i jej użytkownicy mogą przypinać skróty do programu uruchamiającego urządzenia,
To możliwe, że te przypięte skróty mogą kierować użytkowników do działań w Twojej aplikacji
które są nieaktualne lub już nie istnieją. Aby rozwiązać tę sytuację, możesz:
wyłącz skróty, których użytkownicy nie powinni wybierać podczas połączenia
disableShortcuts
, który usuwa określone skróty ze strony statycznej
i dynamicznych skrótów, a także wyłączy przypięte kopie tych skrótów. Ty
możesz też użyć przeciążonej wersji tej metody, która akceptuje
CharSequence
jako niestandardowy komunikat o błędzie. Ten komunikat o błędzie zostanie wyświetlony.
gdy użytkownicy próbują uruchomić jakikolwiek wyłączony skrót.
Ograniczenie szybkości
Jeśli używasz funkcji setDynamicShortcuts(), addDynamicShortcuts()
lub
updateShortcuts()
, możesz mieć możliwość wywoływania tych metod tylko jako
określoną liczbę razy w aplikacji w tle, czyli aplikacji, w której nie ma działań lub
usług na pierwszym planie. Ograniczenie liczby możliwych przypadków
te metody nazywamy ograniczeniem stawek. Ta funkcja zapobiega
ShortcutManagerCompat
z powodu nadmiernego zużywania zasobów urządzenia.
Gdy ograniczanie liczby żądań jest aktywne, isRateLimitingActive()
zwraca wartość prawda.
Jednak ograniczanie szybkości jest resetowane w przypadku pewnych zdarzeń, przez co nawet aplikacje działające w tle
może wywoływać metody ShortcutManager
, dopóki limit nie zostanie ponownie osiągnięty. Te
zdarzenia obejmują:
- Aplikacja wychodzi na pierwszy plan.
- Zmieni się język systemu.
- Użytkownik wykonuje czynność bezpośrednią odpowiedzi na powiadomienie.
Jeśli podczas programowania lub testowania napotkasz ograniczenie szybkości, wybierz opcję
Opcje programisty > Zresetuj ograniczenie szybkości w usłudze ShortcutManager z ustawień urządzenia
ustawienia. Możesz też wpisać w adb
następujące polecenie:
$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]
tworzenie i przywracanie kopii zapasowej;
Możesz zezwolić użytkownikom na wykonywanie operacji tworzenia i przywracania kopii zapasowych aplikacji, gdy
zmieniasz urządzenia, dodając android:allowBackup="true
” atrybut
w pliku manifestu aplikacji. Jeśli obsługujesz tworzenie i przywracanie kopii zapasowej, zachowaj
pamiętaj o tych uwagach na temat skrótów do aplikacji:
- Skróty statyczne są ponownie publikowane automatycznie, ale dopiero po tym, jak użytkownik ponownie instaluje aplikację na nowym urządzeniu.
- Skróty dynamiczne nie mają kopii zapasowych, dlatego uwzględnij logikę w aplikacji, aby ponownie ją opublikować gdy użytkownik otworzy aplikację na nowym urządzeniu.
- Przypięte skróty są automatycznie przywracane do programu uruchamiającego urządzenia, ale system nie tworzy kopii zapasowych ikon powiązanych z przypiętymi skrótami. Dlatego zaoszczędź „przypiętych skrótów” w aplikacji, tak by można było łatwo je przywrócić nowego urządzenia.
Ten fragment kodu pokazuje, jak najlepiej przywrócić w aplikacji kreacje dynamiczne oraz jak sprawdzić, czy przypięte skróty aplikacji zostały zachowane:
Kotlin
class MyMainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (ShortcutManagerCompat.dynamicShortcuts.size == 0) { // Application restored. Re-publish dynamic shortcuts. if (ShortcutManagerCompat.pinnedShortcuts.size > 0) { // Pinned shortcuts are restored. Use updateShortcuts() to make // sure they contain up-to-date information. } } } // ... }
Java
public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (ShortcutManagerCompat.getDynamicShortcuts().size() == 0) { // Application restored. Re-publish dynamic shortcuts. if (ShortcutManagerCompat.getPinnedShortcuts().size() > 0) { // Pinned shortcuts are restored. Use pdateShortcuts() to make // sure they contain up-to-date information. } } } // ... }