
Mit Direktfreigabe-Zielen können Nutzer anderer Apps URLs, Bilder oder andere Daten einfacher und schneller mit Ihrer App teilen. Bei der Direktfreigabe werden Kontakte aus Messaging- und Social-Media-Apps direkt in der Android-Freigabeliste angezeigt, ohne dass Nutzer die App auswählen und dann nach dem Kontakt suchen müssen.
ShortcutManagerCompat
ist eine AndroidX API, die Verknüpfungen zum Teilen bereitstellt und abwärtskompatibel mit der eingestellten ChooserTargetService
API ist. Dies ist die bevorzugte Methode, um sowohl Kurzbefehle zum Teilen als auch ChooserTargets
zu veröffentlichen. Eine Anleitung dazu finden Sie
Siehe AndroidX verwenden, um sowohl Freigabeverknüpfungen als auch ChooserTargets bereitzustellen.
auf dieser Seite.
Ziele für die direkte Freigabe veröffentlichen
In der Zeile „Sharesheet Direct Share“ werden nur dynamische Verknüpfungen angezeigt, die vom Sharing Shortcuts API. Führe die folgenden Schritte aus, um Direct Share zu veröffentlichen. Ziele.
Deklariere in der XML-Ressourcendatei deiner App
share-target
-Elemente.<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Wenn Ihre App initialisiert wird, können Sie mit
setDynamicShortcuts
dynamische Verknüpfungen nach Wichtigkeit sortieren.Je niedriger der Index, desto wichtiger ist die Information. Wenn Sie eine Kommunikations-App entwickeln, können Sie die Top-Unterhaltungen nach Aktualität sortieren, wie sie in Ihrer App angezeigt werden. Veröffentlichen Sie keine veraltete Verknüpfungen. Eine Unterhaltung, in der in den letzten 30 Tagen keine Nutzeraktivität stattgefunden hat, gilt als veraltet.
Kotlin
ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))
Java
List<ShortcutInfoCompat> shortcuts = new ArrayList<>(); shortcuts.add(shortcut1); shortcuts.add(shortcut2); ... ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
Wenn Sie eine Kommunikations-App entwickeln, melden Sie die Nutzung von Verknüpfungen über
pushDynamicShortcut
jedes Mal, wenn der Nutzer Nachrichten empfangen oder an einen Kontakt senden. Weitere Informationen finden Sie unter Nutzung von Kurzbefehlen melden für Kommunikations-Apps auf dieser Seite finden Sie weitere Informationen. Sie können beispielsweise die Nutzung von Nachrichten erfassen, die vom Nutzer gesendet wurden, indem Sie im Shortcut überShortcutInfoCompat.Builder#addCapabilityBinding
mit der Funktionactions.intent.SEND_MESSAGE
Bindungen für Funktionen angeben.Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Wenn der Nutzer einen Kontakt löscht, verwenden Sie
removeLongLivedShortcut
. Dies ist die bevorzugte Möglichkeit, die Verknüpfung zu entfernen, unabhängig davon, ob sie vom System im Cache gespeichert wird Dienstleistungen. Das folgende Code-Snippet zeigt ein Beispiel, wie dies funktioniert.Kotlin
val deleteShortcutId = "..." ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))
Java
String deleteShortcutId = "..."; ShortcutManagerCompat.removeLongLivedShortcuts( myContext, Arrays.asList(deleteShortcutId));
Rang der Ziele für die direkte Freigabe verbessern
Das Android-Teilen-Menü zeigt eine feste Anzahl von Direktfreigabezielen an. Diese werden nach Rang sortiert. Sie können das Ranking Ihrer Tastenkombinationen aufrufen:
- Alle
shortcutIds
-Elemente müssen eindeutig sein und dürfen nicht für verschiedene Ziele wiederverwendet werden. - Stellen Sie sicher, dass die Verknüpfung langlebig ist, indem Sie Folgendes aufrufen:
setLongLived(true)
- Nutzung von Tastenkombinationen in Bezug auf Unterhaltungen melden
für ausgehende und eingehende Nachrichten durch erneutes Veröffentlichen der entsprechenden Verknüpfungen
bis
ShortcutManagerCompat.pushDynamicShortcut
. Weitere Informationen finden Sie auf dieser Seite unter Nutzung von Tastenkürzeln für Kommunikations-Apps melden. - Vermeiden Sie irrelevante oder veraltete Direct Share-Ziele, z. B. Kontakte, denen der Nutzer in den letzten 30 Tagen keine Nachricht gesendet hat
- Bei SMS-Apps sollten Sie keine Tastenkürzel für Kurzwahlnummern oder Unterhaltungen angeben, die als potenzieller Spam eingestuft wurden. Die Wahrscheinlichkeit, dass Nutzer Inhalte in diesen Unterhaltungen teilen, ist äußerst gering.
- Rufen Sie
setCategories()
auf, um die Verknüpfung mit dem passendmimeType
Attribute enthalten. Beispiel: für eine SMS-App: Wenn der Kontakt nicht RCS oder MMS unterstützt, wird die Verknüpfen Sie die entsprechende Verknüpfung mit Nicht-Text-MIME-Typen wieimage/*
undvideo/*
. - Sobald eine dynamische Verknüpfung für eine bestimmte Unterhaltung gesendet wurde und die Nutzung geändert wird, ändern Sie die ID der Verknüpfung nicht. So bleiben Nutzungsdaten für das Ranking erhalten.
Wenn der Nutzer auf ein Direct Share-Ziel tippt, muss Ihre App ihn zu einer Benutzeroberfläche weiterleiten, auf der er eine Aktion direkt auf das Subjekt des Ziels ausführen kann. Zeigen Sie dem Nutzer keine Benutzeroberfläche zur Klärung von Mehrdeutigkeiten an und leiten Sie ihn nicht zu einer Benutzeroberfläche weiter, die nichts mit dem angetippten Ziel zu tun hat. Wenn Nutzer in einer Messaging-App auf ein Ziel für die direkte Freigabe tippen, werden sie beispielsweise zu einer Konversationsansicht mit der ausgewählten Person weitergeleitet. Die Bildschirmtastatur sichtbar und die Nachricht ist mit den geteilten Daten vorausgefüllt.
Sharing Shortcuts API
Ab Android 10 (API-Level 29)
Methoden und Verbesserungen für ShortcutInfo.Builder
hinzugefügt
die zusätzliche Informationen zum Freigabeziel enthalten:
setCategories()
- Ab Android 10 werden Kategorien auch verwendet, um Verknüpfungen zu filtern, die Intents oder Aktionen für die Freigabe verarbeiten können. Weitere Informationen finden Sie unter Freigaben deklarieren target. Dieses Feld ist für Verknüpfungen erforderlich, die als Freigabeziele verwendet werden sollen.
setLongLived()
Gibt an, ob eine Tastenkombination gültig ist, wenn ihre Veröffentlichung aufgehoben wurde, oder durch die App unsichtbar gemacht werden (als dynamische oder angepinnte Verknüpfung). Wenn eine Verknüpfung langlebig ist, können sie von verschiedenen Systemdiensten im Cache gespeichert werden, selbst nachdem sie die Veröffentlichung als dynamische Verknüpfung aufgehoben.
Wenn Sie einen dauerhaften Verknüpfungslink erstellen, kann sich das positiv auf das Ranking auswirken. Weitere Informationen finden Sie unter Das Beste erhalten finden Sie weitere Informationen.
setShortLabel()
,setLongLabel()
Wenn Sie einen Verknüpfungs-Shortcut zu einer einzelnen Person veröffentlichen, geben Sie in
setLongLabel()
den vollständigen Namen und insetShortLabel()
einen Kurznamen wie einen Alias oder einen Vornamen an.
Hier finden Sie ein Beispiel für die Veröffentlichung von Freigabeverknüpfungen auf GitHub.
Bilder für Verknüpfungen bereitstellen
Wenn Sie eine Freigabeverknüpfung erstellen möchten, müssen Sie über setIcon()
ein Bild hinzufügen.
Verknüpfungen zum Teilen können auf allen Systemoberflächen angezeigt und neu gestaltet werden.
Außerdem können einige Geräte mit Android-Versionen 7, 8 oder 9 (API-Level 25,
26, 27 und 28) zeigen möglicherweise reine Bitmap-Symbole ohne Hintergrund an, was
den Kontrast erheblich verringert. Damit die Verknüpfung wie gewünscht aussieht,
stellen Sie mit IconCompat.createWithAdaptiveBitmap()
eine adaptive Bitmap bereit.
Achten Sie darauf, dass adaptive Bitmaps denselben Richtlinien und Abmessungen für adaptive Symbole entsprechen. Die am häufigsten verwendete Methode besteht darin, die beabsichtigte quadratische Bitmap 72 x 72 dp und mittig auf einer transparenten Canvas mit 108 x 108 dp. Wenn Ihr Symbol transparente Bereiche enthält, müssen Sie eine Hintergrundfarbe angeben. Andernfalls werden transparente Bereiche schwarz dargestellt.
Stellen Sie keine Bilder bereit, die in einer bestimmten Form maskiert sind. Vor Android 10 (API-Level 29) war es beispielsweise üblich, Nutzeravatare für Direct Share-ChooserTarget
s bereitzustellen, die in einem Kreis maskiert waren. Das Android-Teilen-Menü und andere Systemoberflächen in Android 10 haben jetzt ein einheitliches Design für Verknüpfungsbilder.
Die bevorzugte Methode zum Bereitstellen von Verknüpfungen zum Teilen über
ShortcutManagerCompat
,
Direct Share ChooserTarget
-Objekte von Backcompat werden automatisch in
für Sie zu erstellen.
Freigabeziel deklarieren
Freigabeziele müssen in der Ressourcendatei der App deklariert werden, ähnlich wie bei den Definitionen statischer Tastenkombinationen. Freigabe hinzufügen
Zieldefinitionen im <shortcuts>
-Stammelement der Ressourcendatei
sowie andere statische Kurzbefehle. Jedes <share-targets>
-Element
enthält Informationen zum freigegebenen Datentyp, zu übereinstimmenden Kategorien und
Zielklasse, die den Freigabe-Intent verarbeitet. Der XML-Code sieht in etwa so aus:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity"> <data android:mimeType="text/plain" /> <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" /> </share-target> </shortcuts>
Das Datenelement in einem Freigabeziel ähnelt der Datenspezifikation in einem Intent-Filter. Jedes Freigabeziel kann Mehrere Kategorien, die nur für die veröffentlichten Kurzbefehle einer App verwendet werden mit seinen Share-Target-Definitionen. Kategorien können beliebige App-Definitionen haben Werte.
Wenn der Nutzer im Android-Freigabebereich die Verknüpfung für die Freigabe auswählt, die dem Beispiel für die Zielfreigabe oben entspricht, erhält die App die folgende Freigabeabsicht:
Action: Intent.ACTION_SEND ComponentName: {com.example.android.sharingshortcuts / com.example.android.sharingshortcuts.SendMessageActivity} Data: Uri to the shared content EXTRA_SHORTCUT_ID: <ID of the selected shortcut>
Wenn der Nutzer das Freigabeziel über die Verknüpfungen im Launcher öffnet, erhält die App
Intent erstellt, der beim Hinzufügen der Verknüpfungsverknüpfung zum
ShortcutManagerCompat auf.
Da es sich um einen anderen Intent handelt, ist Intent.EXTRA_SHORTCUT_ID
nicht verfügbar.
und Sie müssen die ID bei Bedarf manuell übergeben.
Nutzung von Kurzbefehlen für Kommunikations-Apps melden
Wenn Sie eine Kommunikations-App entwickeln, können Sie Ihr Ranking im Android-Freigabe-Menü verbessern, indem Sie die Nutzung sowohl für ausgehende als auch für eingehende Nachrichten erfassen.
Veröffentlichen Sie dazu die Verknüpfungsverknüpfung für die Unterhaltung, die den Kontakt repräsentiert, erneut über
ShortcutManagerCompat.pushDynamicShortcut
Die Nutzung von Verknüpfungen und Funktionsbindungen ist abwärtskompatibel zu Android 5.0 (API 21)
Verwendung von Tastenkürzeln für ausgehende Nachrichten melden
Die Meldung der Nutzung für vom Nutzer gesendete Nachrichten funktioniert ähnlich wie das Klicken auf die Schaltfläche „Senden“ nach dem Erstellen einer Nachricht.
Wenn Sie Nutzungsberichte auslösen möchten, geben Sie in der Verknüpfung Funktionsbindungen an
bis ShortcutInfoCompat.Builder#addCapabilityBinding
mit der actions.intent.SEND_MESSAGE
-Funktion.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Wenn sich die ausgehende Nachricht auf einen Gruppenchat bezieht, musst du auch die Audience
hinzufügen
recipient
-Parameter
-Typ mit der Capability verknüpft ist.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Nutzung von Kurzbefehlen für eingehende Nachrichten melden
Wenn Sie Nutzungsberichte auslösen möchten, wenn der Nutzer eine Nachricht wie eine SMS, eine Chatnachricht, eine E-Mail oder Benachrichtigungen erhält, müssen Sie zusätzlich über ShortcutInfoCompat.Builder#addCapabilityBinding
mit der Funktion actions.intent.RECEIVE_MESSAGE
Verknüpfungen für die Funktionen im Shortcut angeben.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(firstName) .setLongLabel(fullName) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE") .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
Wenn die eingehende Nachricht aus einem Gruppenchat stammt, musst du auch die Audience
hinzufügen
Parameterwert als sender
-Typ festlegen
mit der Capability verbunden ist.
Kotlin
val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build() ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)
Java
ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier) ... .setShortLabel(groupShortTitle) .setLongLabel(groupLongTitle) .setCategories(matchedCategories) .setLongLived(true) .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience")) .build(); ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
AndroidX verwenden, um sowohl Freigabeverknüpfungen als auch ChooserTargets bereitzustellen
Damit die AndroidX-Kompatibilitätsbibliothek verwendet werden kann, muss das Manifest der App die Metadaten-Auswahl-Zieldienste und Intent-Filter enthalten. Weitere Informationen finden Sie in der aktuellen ChooserTargetService
Direct Share API.
Dieser Dienst ist bereits in der Kompatibilitätsbibliothek deklariert, also tut der Nutzer Der Dienst muss nicht im Manifest der App deklariert werden. Der Link von Die Freigabeaktivität für den Dienst muss als Auswahlziel berücksichtigt werden. Dienstanbieter.
Im folgenden Beispiel ist die Implementierung von ChooserTargetService
androidx.core.content.pm.ChooserTargetServiceCompat
, die bereits definiert ist
in AndroidX:
<activity android:name=".SendMessageActivity" android:label="@string/app_name" android:theme="@style/SharingShortcutsDialogTheme"> <!-- This activity can respond to Intents of type SEND --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <!-- Only needed if you import the sharetarget AndroidX library that provides backwards compatibility with the old DirectShare API. The activity that receives the Sharing Shortcut intent needs to be taken into account with this chooser target provider. --> <meta-data android:name="android.service.chooser.chooser_target_service" android:value="androidx.sharetarget.ChooserTargetServiceCompat" /> </activity>
Häufig gestellte Fragen zum Teilen von Verknüpfungen
Wie werden die Daten zur Nutzung von Verknüpfungen gespeichert und verlassen sie das Gerät?
Verknüpfungen werden vollständig auf dem Gerät im Systemdatenverzeichnis in einem die verschlüsselte Laufwerkpartition. Informationen in Kürzeln wie Symbol, Intent, und Namen von Personen und Ressourcen sind nur für Systemdienste und die die Verknüpfungen veröffentlicht.
Wie ist Direct Share entstanden?
Wir haben die Funktion „Direct Share“ in Android 6.0 (API-Level 23) eingeführt, damit Apps
ChooserTarget
-Objekte über ChooserTargetService
bereitstellen. Die Ergebnisse wurden reaktiv auf Anfrage abgerufen, was zu einer langen Ladezeit für Ziele führte.
In Android 10 (API-Level 29) haben wir die ChooserTargetService
Direct Share APIs durch die neue Sharing Shortcuts API ersetzt. Anstatt Ergebnisse reaktiv auf Abruf abzurufen, können Apps mit der Sharing Shortcuts API Ziele für die direkte Freigabe im Voraus veröffentlichen. Dadurch wurde das Abrufen von Zielen für die direkte Freigabe bei der Vorbereitung des Freigabe-Sheets erheblich beschleunigt. Die ChooserTargetService
Direct Share
funktioniert zwar weiterhin, aber das System
sortiert die bereitgestellten Ziele
als jedes Ziel, das die Sharing Shortcuts API verwendet.
Mit Android 11 (API-Level 30) wurde der ChooserTargetService
-Dienst eingestellt. Die Sharing Shortcuts API ist die einzige Möglichkeit, Ziele für die direkte Freigabe anzugeben.
Wie unterscheiden sich veröffentlichte Verknüpfungen für Freigabeziele vom Launcher Tastenkombinationen (die typische Verwendung von Tastenkombinationen beim langen Drücken von App-Symbolen in Launcher)?
Alle für ein „Ziel teilen“ veröffentlichte Verknüpfungen ist auch ein Launcher, und wird im Menü angezeigt, wenn du lange auf das Symbol deiner App drückst. Die Die maximale Anzahl an Kurzbefehlen pro Aktivität gilt auch für die Gesamtzahl der Verknüpfungen, die eine App veröffentlicht (Ziele teilen und alte Launcher-Verknüpfungen kombiniert).
Wie viele Tastenkombinationen zum Teilen sollte veröffentlicht werden?
Die Anzahl der Freigabe-Verknüpfungen ist auf die gleiche Anzahl von dynamischen Verknüpfungen beschränkt, die über getMaxShortcutCountPerActivity(android.content.Context)
verfügbar sind. Sie können beliebig viele Verknüpfungen veröffentlichen, müssen jedoch beachten, dass die Freigabeverknüpfungen im App Launcher durch langes Drücken und im Freigabebereich sichtbar sein können. Die meisten App-Launcher zeigen beim langen Drücken maximal vier oder fünf Verknüpfungen im Hochformat und acht im Querformat an. Ansehen
Häufig gestellte Fragen
.