Zarządzaj skrótami

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.

Zrzut ekranu przedstawiający arkusz udostępniania w Androidzie
Rysunek 1. Arkusz udostępniania Androida Cele udostępniania bezpośredniego pojawiają się w pierwszym wierszu, po nim znajdują się aplikacje o rankingu, a następnie listy aplikacji.

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:

  1. Skróty statyczne: skróty, których metoda isDeclaredInManifest() zwraca true.
  2. 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():

  1. W pliku AndroidManifest.xml umieść przypisanie atrybutu android:taskAffinity=′′ na trampolinie.
  2. 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:

  1. Aplikacja do obsługi czatu udostępnia 4 dynamiczne skróty, reprezentujące 4 najczęściej ostatnie rozmowy: c1, c2, c3 i c4.
  2. Użytkownik przypina wszystkie 4 skróty.
  3. 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.

  1. 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.
  2. 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.
            }
        }
    }
    // ...
}