Kurzbefehle verwalten

Nachdem Sie Verknüpfungen erstellt haben, müssen Sie sie möglicherweise während der gesamten Lebensdauer Ihres für Ihre App. Beispielsweise können Sie Ihre App optimieren, indem Sie festlegen, wie oft Nutzer bestimmte Aktionen mit Ihren Verknüpfungen ausführen. In einem anderen Fall können Sie eine angepinnte Verknüpfung deaktivieren, damit Ihre App veraltete oder fehlende Aktionen ausführen. Für Tastenkombinationen, auf die in den ist es sinnvoll, die Nutzung zu erfassen, um Signale zur Verbesserung der Ranking von Verknüpfungen.

Auf dieser Seite werden diese und einige andere gängige Möglichkeiten zur Verwaltung Ihres Tastenkombinationen.

Verhalten von Verknüpfungen

Die folgenden Abschnitte enthalten allgemeine Informationen zum Verhalten von Verknüpfungen: darunter Sichtbarkeit, Anzeigereihenfolge und Ränge.

Sichtbarkeit von Verknüpfungen

Statische und dynamische Tastenkombinationen werden in einem unterstützten Launcher angezeigt oder wenn der Nutzer eine bestimmte Geste oder einen Sprachbefehl ausführt. An unterstützten Launchern, eine Touch-Geste halten Sie das Launcher-Symbol der App Bei anderen Launcher-Apps kann die Touch-Geste jedoch anders sein. Mit Google Assistant verwenden, können Verknüpfungen in Assistant angezeigt oder von einem Nutzer gestartet werden Sprachbefehl.

Die Klasse LauncherApps stellt APIs bereit, auf die Launcher-Apps zugreifen können Tastenkombinationen.

Angeheftete Verknüpfungen werden direkt im Launcher angezeigt und sind daher immer sichtbar. Eine angepinnte Verknüpfung wird nur in den folgenden Situationen aus der Übersicht entfernt:

  • Der Nutzer entfernt sie.
  • Die mit der Verknüpfung verknüpfte App wurde deinstalliert.
  • Der Nutzer löscht die Daten der App unter Einstellungen > Apps und Benachrichtigungen die App auswählen und dann auf Speicher > Speicherinhalt löschen.

Freigabeziele eine Teilmenge der dynamischen Tastenkombinationen, die in der Zeile zum direkten Teilen der Android-Share-Sheet.

<ph type="x-smartling-placeholder">
</ph> Screenshot des Android-Sharesheet <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Das Android-Sharesheet. Direkte Freigabeziele werden in der ersten Zeile angezeigt, gefolgt von bewerteten Apps und schließlich den Apps-Listen.

Reihenfolge der Tastaturkürzel

Wenn die Verknüpfungen einer App im Launcher angezeigt werden, müssen sie in den folgenden Auftrag:

  1. Statische Tastenkombinationen: Tastenkombinationen, deren isDeclaredInManifest()-Methode gibt true zurück.
  2. Dynamische Tastenkombinationen: Verknüpfungen, deren ShortcutInfo.isDynamic() gibt true zurück.

Innerhalb jedes Verknüpfungstyps – statisch und dynamisch – sind Verknüpfungen in der folgenden Reihenfolge sortiert: Rang wird gemäß ShortcutInfo.getRank erhöht. Google Assistant berücksichtigt auch den Rang von Tastenkürzeln bei der Bestimmung kontextabhängiger Verknüpfungen, die angezeigt werden sollen. Nutzenden.

Ränge sind nicht negative, sequenzielle Ganzzahlen. Statische Tastenkombinationen sind nach in der Reihenfolge, in der sie in Ihrer shortcuts.xml-Datei aufgeführt sind. Für dynamische Creatives Tastenkombinationen kannst du die Reihenfolge der vorhandenen Verknüpfungen aktualisieren, wenn du anrufst updateShortcuts(Context, List), addDynamicShortcuts(Context, List), pushDynamicShortcut(Context, ShortcutInfoCompat) oder setDynamicShortcuts(Context, List)

Die Reihenfolge der Freigabeziele hängt von verschiedenen Faktoren ab, z. B. von früheren Nutzern Verlauf, Aktualität, Häufigkeit Ranghinweis App-Nutzung und die für die Unterhaltung festgelegte Priorität Verknüpfung zum Teilen. Freigabeziele, die mit der Freigabe Shortcuts API gegenüber den Share-Zielen des ChooserTargetService die in Android 11 eingestellt wurde. Ab Android 12: Freigabeziele die von der eingestellten ChooserTargetService generiert wurden, werden nicht mehr im teilen.

Die meisten Launcher zeigen maximal vier Tastenkombinationen an. Für jede Kombination von statische und dynamische Tastenkombinationen festlegen, zeigt der Launcher eine maximal zwei statische und zwei dynamische Tastenkombinationen. Wenn Sie beispielsweise vier statische Verknüpfungen definieren und programmatisch drei dynamische werden die ersten beiden statischen Tastenkombinationen und die beiden die am besten bewerteten dynamischen Tastenkombinationen.

Mehrere Intents und Aktivitäten verwalten

Wenn Ihre App mehrere Vorgänge ausführen soll, wenn der Nutzer ein können Sie sie so konfigurieren, dass aufeinanderfolgende Aktivitäten ausgelöst werden. Sie können indem Sie mehrere Intents zuweisen, mit denen eine Aktivität oder Intent-Flags festlegen.

Mehrere Intents zuweisen

Wenn Sie eine Verknüpfung mit ShortcutInfoCompat.Builder erstellen, können Sie Folgendes verwenden: setIntents() statt setIntent(). Wenn Sie setIntents() anrufen, mehrere Aktivitäten in Ihrer App starten, wenn der Nutzer eine Verknüpfung auswählt, und platziert alle bis auf die letzte Aktivität in der Liste in den Stapel. Wenn die Der Nutzer tippt dann auf die Schaltfläche „Zurück“ des Geräts und er sieht eine andere Aktivität in Ihrer App. anstatt zum Launcher des Geräts zurückzukehren.

Eine Aktivität aus einer anderen starten

Statische Tastenkombinationen dürfen keine Flags für benutzerdefinierte Intents enthalten. Der erste Intent einer statischen enthält immer Intent.FLAG_ACTIVITY_NEW_TASK und Intent.FLAG_ACTIVITY_CLEAR_TASK-festgelegt. Das bedeutet, wenn Ihre App ausgeführt wird, werden alle vorhandenen Aktivitäten in der Anwendung gelöscht, wenn eine statische wird gestartet. Wenn Sie das nicht möchten, können Sie ein Trampolin verwenden Aktivität – eine unsichtbare Aktivität, die eine andere Aktivität startet – in Activity.onCreate(Bundle), der Activity.finish() aufruft:

  1. Fügen Sie in der Datei AndroidManifest.xml die Attributzuweisung hinzu. android:taskAffinity= beim Trampolin.
  2. Verweisen Sie in der Ressourcendatei für Tastenkombinationen auf die Trampolinaktivität im Intent innerhalb des statischen Kürzels.

Weitere Informationen zu Trampolinaktivitäten finden Sie unter Eine Aktivität starten von einem anderen.

Intent-Flags festlegen

Sie können dynamische Verknüpfungen mit einer beliebigen Reihe von Intent-Flags veröffentlichen. Geben Sie vorzugsweise Intent.FLAG_ACTIVITY_CLEAR_TASK zusammen mit Ihrem anderen Flags. Wenn Sie versuchen, eine andere Aufgabe zu starten, während Ihre App ausgeführt wird, wird die Zielaktivität möglicherweise nicht angezeigt.

Weitere Informationen zu Aufgaben und Intent-Flags finden Sie unter Aufgaben und Back-Stack.

Verknüpfungen aktualisieren

Das Launcher-Symbol jeder App kann höchstens eine Reihe statischer und dynamischer kombinierten Tastenkombinationen, die dem Wert entsprechen, der von getMaxShortcutCountPerActivity Es gibt keine Begrenzung für die Anzahl der Verknüpfungen, die eine App erstellen kann.

Wenn eine dynamische Verknüpfung angepinnt ist, auch wenn der Publisher sie als dynamische Verknüpfung, ist die angepinnte Verknüpfung weiterhin sichtbar und kann gestartet werden. Dadurch können Für eine App gibt es mehr als getMaxShortcutCountPerActivity() Verknüpfungen.

Betrachten Sie das folgende Beispiel, in dem angenommen wird, dass der von getMaxShortcutCountPerActivity() ist 4:

  1. Eine Chat-App veröffentlicht vier dynamische Verknüpfungen, die die vier am häufigsten verwendeten Neueste Konversationen: c1, c2, c3 und c4.
  2. Der Nutzer pinnen alle vier Tastenkombinationen an.
  3. Später startet der Nutzer drei weitere Unterhaltungen: c5, c6 und c7. Die veröffentlicht die Publisher-App seine dynamischen Verknüpfungen noch einmal. Die neue dynamische Tastenkombination Liste lautet: c4, c5, c6 und c7.

Die App muss c1, c2 und c3 entfernen, da maximal vier Zeichen angezeigt werden können. dynamische Tastenkombinationen. c1, c2 und c3 sind jedoch weiterhin angepinnte auf die der Nutzer zugreifen kann.

Der Nutzer kann dann auf insgesamt sieben Verknüpfungen zugreifen, die mit Aktivitäten in in der Publisher-App. Das liegt daran, dass die Gesamtzahl die maximale Anzahl und die drei angepinnten Tastenkombinationen.

  1. Die App kann mit updateShortcuts(Context, List) alle der bereits sieben Tastenkombinationen. Beispielsweise können Sie diese Tastenkombinationen aktualisieren, wenn die anderen Teilnehmenden ändern sich die Symbole.
  2. Sie können die addDynamicShortcuts(Context, List) und setDynamicShortcuts(Context, List) Methoden zum Aktualisieren vorhandener Verknüpfungen mit denselben IDs. Sie können sie jedoch nicht für nicht dynamische, nicht dynamische weil mit diesen beiden Methoden versucht wird, zu dynamischen Tastenkombinationen.

Die Anzahl der Tastenkombinationen, die zur Anzeige auf Geräten gedrückt werden können, ist nicht begrenzt. Assistant-Apps wie Google Assistant. Verwenden Sie den pushDynamicShortcut(). der ShortcutManagerCompat-Jetpack-Bibliothek zum Erstellen und Aktualisieren Verknüpfungen zur Verwendung in Assistant-Apps. Fügen Sie außerdem die Google Shortcuts Integration Bibliothek hinzufügen, damit dynamische Links auf Google erscheinen können. Assistent.

Weitere Informationen zu den Richtlinien für App-Verknüpfungen, z. B. zum Aktualisieren von Verknüpfungen, Siehe Best Practices für Tastenkombinationen.

Umgang mit Änderungen der Systemsprache

Apps müssen dynamische und angepinnte Verknüpfungen aktualisieren, wenn sie die Intent.ACTION_LOCALE_CHANGED-Nachricht, die eine Änderung am System anzeigt Sprache.

Nutzung von Kurzbefehlen verfolgen

Um zu bestimmen, in welchen Situationen statische und dynamische Tastenkombinationen angezeigt werden, prüft der Launcher den Aktivierungsverlauf von Verknüpfungen. Bei statischen Tastenkombinationen können Sie verfolgen, wann Nutzer bestimmte Aktionen in Ihrer App ausführen, die Methode reportShortcutUsed() aufrufen und ihr die ID eines wenn eines der folgenden Ereignisse eintritt:

  • Der Nutzer wählt die Verknüpfung mit der angegebenen ID aus.
  • Innerhalb der App führt der Nutzer die Aktion manuell aus, die der dieselbe Tastenkombination.

Deine App verfolgt die Nutzung dynamischer Verknüpfungen, indem sie die pushDynamicShortcut() hinzu und übergeben Sie die ID der Verknüpfung, wenn ein relevantes Ereignis eintritt. Wenn Sie die Verwendung dynamischer Tastenkombinationen mit dieser Methode senden, schlagen Assistant-Apps wie Google Assistant relevante Verknüpfungen vor. Da die Methode pushDynamicShortcut() beim Aufruf die Nutzung meldet, rufen Sie nicht die Methode reportShortcutUsed() für dieselben Tastenkombinationen.

Bei Konversationskürzeln ist es wichtig, die Nutzung für ausgehende und eingehende Nachrichten. Weitere Informationen finden Sie in den Best Practices für Personen und Unterhaltungen.

Tastenkombinationen deaktivieren

Da Ihre App und ihre Nutzer Verknüpfungen an den Launcher des Geräts anpinnen können, ist es können Nutzer über angeheftete Verknüpfungen zu Aktionen in Ihrer App weitergeleitet werden. die veraltet sind oder nicht mehr existieren. Zur Bewältigung dieser Situation haben Sie folgende Möglichkeiten: die Verknüpfungen deaktivieren, die Nutzer nicht durch Aufrufen von disableShortcuts, wodurch die angegebenen Tastenkombinationen aus der statischen Datei entfernt werden und dynamische Tastenkombinationen und deaktiviert angepinnte Kopien dieser Tastenkombinationen. Ich können auch eine überlastete Version dieser Methode verwenden, CharSequence als benutzerdefinierte Fehlermeldung. Diese Fehlermeldung erscheint dann Wenn Nutzer versuchen, eine deaktivierte Verknüpfung zu starten.

Ratenbegrenzung

Wenn Sie die setDynamicShortcuts(), addDynamicShortcuts() oder updateShortcuts()-Methoden verwenden, können Sie diese Methoden möglicherweise nur als eine bestimmte Anzahl von Malen in einer Hintergrund-App, also einer App ohne Aktivitäten oder im Vordergrund. Die Begrenzung für die Häufigkeit, mit der Sie Aufruf dieser Methoden wird als Ratenbegrenzung bezeichnet. Diese Funktion verhindert, ShortcutManagerCompat durch übermäßige Nutzung von Geräteressourcen.

Wenn die Ratenbegrenzung aktiv ist, gibt isRateLimitingActive() „true“ zurück. Die Ratenbegrenzung wird jedoch während bestimmter Ereignisse zurückgesetzt. Das gilt auch für Hintergrund-Apps, kann ShortcutManager-Methoden aufrufen, bis die Ratenbegrenzung wieder erreicht ist. Diese Ereignisse umfassen Folgendes:

  • Eine App wird im Vordergrund angezeigt.
  • Das Systemsprache ändert sich.
  • Der Nutzer führt die Inline-Antwort-Aktion auf eine Benachrichtigung aus.

Wenn Sie während der Entwicklung oder beim Testen auf eine Ratenbegrenzung stoßen, können Sie Entwickleroptionen > Zugriffsbegrenzung im ShortcutManager über die Einstellungen oder Sie können den folgenden Befehl in adb eingeben:

$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]

Back-up und Wiederherstellung

Sie können Nutzern erlauben, Sicherungs- und Wiederherstellungsvorgänge in Ihrer App auszuführen, wenn Gerät wechseln, indem Sie „android:allowBackup="true“ einfügen Attribut Zuweisung in der Manifestdatei Ihrer App. Wenn Sie Sicherung und Wiederherstellung unterstützen, beachten Sie die folgenden Hinweise zu App-Verknüpfungen:

  • Statische Tastenkombinationen werden automatisch neu veröffentlicht, aber erst, nachdem der Nutzer Ihre App auf einem neuen Gerät neu installiert.
  • Dynamische Verknüpfungen werden nicht gesichert. Füge deiner App daher Logik hinzu, um sie neu zu veröffentlichen. wenn ein Nutzer Ihre App auf einem neuen Gerät öffnet.
  • Angepinnte Verknüpfungen werden automatisch im Launcher des Geräts wiederhergestellt, aber der Das System sichert keine Symbole, die mit angepinnten Verknüpfungen verknüpft sind. Daher speichern Sie deine angepinnten Verknüpfungen“ in deiner App, sodass du sie später ganz einfach auf einem neuen Gerät.

Im folgenden Code-Snippet sehen Sie, wie Sie die dynamischen Tastenkombinationen und wie Sie prüfen können, ob die angepinnten Verknüpfungen Ihrer App beibehalten wurden:

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