Android verwendet Intents und die damit verbundenen Extras, damit Nutzer Informationen schnell und einfach teilen können. ganz einfach mit ihren Lieblings-Apps.
Android bietet Nutzern zwei Möglichkeiten, Daten zwischen Apps zu teilen:
- Das Android-Sharesheet ist in erster Linie zum Senden von Inhalten außerhalb deiner App und/oder direkt an einen anderen Nutzer senden. Zum Beispiel, wenn Sie eine URL mit einem Freund teilen.
- Der Android-Intent-Resolver eignet sich am besten für die Übergabe von Daten an den nächsten Phase einer klar definierten Aufgabe. Beispiel: Sie können eine PDF-Datei über Ihre App öffnen und Nutzern die Möglichkeit geben, ihr bevorzugtes Anzeigetool auszuwählen.
Wenn Sie einen Intent erstellen, geben Sie die Aktion an, die der Intent ausführen soll.
Android verwendet die Aktion ACTION_SEND
, um Daten von einer Aktivität an eine andere zu senden, auch über Prozessgrenzen hinweg. Sie müssen die Daten und ihren Typ angeben. Das System erkennt automatisch die kompatiblen Aktivitäten,
die die Daten empfangen und
dem Nutzer anzeigen können. Beim Intent-Resolver
Wenn nur eine Aktivität den Intent verarbeiten kann, beginnt diese Aktivität sofort.
Vorteile des Android-Sharesheet

Wir empfehlen dir dringend, das Android-Sharesheet zu verwenden, um für Konsistenz Apps. Zeigen Sie keine eigene Liste der Freigabeziele Ihrer App an und erstellen Sie keine eigenen Varianten des Freigabebereichs.
Über das Android-Teilen-Menü können Nutzer Informationen mit der richtigen Person teilen und dabei relevante App-Vorschläge erhalten – und das mit nur einem Tippen. In der Freigabeliste können Ziele vorgeschlagen werden, die für benutzerdefinierte Lösungen nicht verfügbar sind. Außerdem wird eine einheitliche Rangfolge verwendet. Das liegt daran, dass auf dem Sharesheet Informationen zu App- und Nutzeraktivitäten berücksichtigt werden können. die nur dem System zur Verfügung stehen.
Das Android-Freigabe-Widget bietet außerdem viele praktische Funktionen für Entwickler. So können Sie zum Beispiel Gehen Sie so vor:
- Herausfinden, wann und wo Nutzer Inhalte teilen
- Benutzerdefinierte
ChooserTarget
und App-Zielgruppen hinzufügen - Vorschau auf Rich-Text-Inhalte ab Android 10 (API-Level 29) bereitstellen
- Ziele ausschließen, die mit bestimmten Komponentennamen übereinstimmen
Android-Sharesheet verwenden
Erstellen Sie für alle Freigabetypen einen Intent und legen Sie seine Aktion auf
Intent.ACTION_SEND
Rufen Sie Intent.createChooser()
auf, um das Android-Freigabe-Menü aufzurufen, und übergeben Sie dabei das Intent
-Objekt.
Er gibt eine Version deines Intents zurück, in der immer das Android-Sharesheet angezeigt wird.
Textinhalt senden
Die einfachste und häufigste Verwendung des Android-Sharesheet ist das Senden von Textinhalten von von einer Aktivität zur anderen. Die meisten Browser können beispielsweise die URL der aktuell angezeigten Seite als Text mit einer anderen App. Dies ist hilfreich, wenn Sie einen Artikel oder eine Website über oder in sozialen Netzwerken erreicht werden. Hier ein Beispiel:
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } val shareIntent = Intent.createChooser(sendIntent, null) startActivity(shareIntent)
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, null); startActivity(shareIntent);
Optional können Sie zusätzliche Informationen hinzufügen, z. B. E-Mail-Empfänger (EXTRA_EMAIL
, EXTRA_CC
, EXTRA_BCC
) oder den Betreff der E-Mail (EXTRA_SUBJECT
).
Hinweis:Bei einigen E-Mail-Apps, z. B. Gmail, wird eine
String[]
für Extras wie
EXTRA_EMAIL
und EXTRA_CC
. Verwenden Sie putExtra(String, String[])
, um sie der Absicht hinzuzufügen.
Binäre Inhalte senden
Binäre Daten mit der Aktion ACTION_SEND
teilen
Legen Sie den entsprechenden MIME-Typ fest und fügen Sie einen URI zu den Daten in das zusätzliche EXTRA_STREAM
ein, wie im folgenden Beispiel gezeigt.
Dies wird üblicherweise verwendet, um ein Bild zu teilen, kann aber auch für beliebige Arten von binären Inhalten genutzt werden.
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND // Example: content://com.google.android.apps.photos.contentprovider/... putExtra(Intent.EXTRA_STREAM, uriToImage) type = "image/jpeg" } startActivity(Intent.createChooser(shareIntent, null))
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); // Example: content://com.google.android.apps.photos.contentprovider/... shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage); shareIntent.setType("image/jpeg"); startActivity(Intent.createChooser(shareIntent, null));
Die empfangende Anwendung benötigt die Berechtigung für den Zugriff auf die Daten von Uri
auf die sie verweist. Dafür gibt es zwei empfohlene Vorgehensweisen:
- Speichern Sie die Daten in Ihrem eigenen
ContentProvider
und achten Sie darauf, dass andere Apps die erforderliche Zugriffsberechtigung für deinen Anbieter haben. Die bevorzugte Methode, Berechtigungen pro URI, die temporär und gewähren nur der empfangenden Anwendung Zugriff. Eine einfache Möglichkeit, eine solcheContentProvider
zu erstellen, ist die Verwendung der Helper-KlasseFileProvider
. - Verwende das System
MediaStore
. DasMediaStore
ist in erster Linie für Video-, Audio- und Bild-MIME-Typen vorgesehen. Ab Android 3.0 (API-Ebene 11) können jedoch auch andere Datentypen gespeichert werden. Weitere Informationen finden Sie unterMediaStore.Files
Dateien können mitscanFile()
in dieMediaStore
eingefügt werden. Anschließend wird ein für die Freigabe geeigneterUri
imcontent://
-Format an den angegebenenonScanCompleted()
-Callback übergeben. Hinweis: Sobald die Inhalte dem SystemMediaStore
hinzugefügt wurden, können alle Apps auf dem Gerät darauf zugreifen.
Den richtigen MIME-Typ verwenden
Geben Sie den spezifischsten MIME-Typ für die Daten an, die Sie importieren möchten.
Senden. Verwenden Sie beispielsweise text/plain
, wenn Sie Nur-Text freigeben. Hier sind einige gängige MIME-Typen für das Senden einfacher Daten unter Android:
Empfänger registrieren sich für | Absender senden |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Unterstützte Dateiendungen | application/pdf |
Weitere Informationen zu MIME-Typen finden Sie in der IANA offizielles Register für MIME-Medientypen.
Je nach angegebenem MIME-Typ wird im Android-Freigabe-Dialogfeld möglicherweise eine Inhaltsvorschau angezeigt. Einige Vorschaufunktionen sind nur für bestimmte Typen verfügbar.
Mehrere Inhalte teilen
Wenn du mehrere Inhalte freigeben möchtest, verwende die Aktion ACTION_SEND_MULTIPLE
zusammen mit einer Liste von URIs, die auf die Inhalte verweisen. Der MIME-Typ hängt davon ab, welche Inhalte Sie teilen. Wenn Sie beispielsweise drei JPEG-Bilder freigeben, verwenden Sie den Typ "image/jpg"
. Verwenden Sie "image/*"
für eine Mischung aus Bildtypen, um einen
die alle Arten von Bildern verarbeitet. Es ist zwar möglich, eine Kombination aus mehreren Typen zu verwenden,
davon abraten, da es
für den Empfänger nicht deutlich,
was gesendet werden soll. Wenn mehrere Typen gesendet werden müssen, verwenden Sie
"*/*"
Die empfangende Anwendung muss Ihre Daten parsen und verarbeiten. Beispiel:
val imageUris: ArrayList<Uri> = arrayListOf( // Add your image URIs here imageUri1, imageUri2 ) val shareIntent = Intent().apply { action = Intent.ACTION_SEND_MULTIPLE putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris) type = "image/*" } startActivity(Intent.createChooser(shareIntent, null))
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, null));
Die bereitgestellten Uri
-Objekte müssen auf Daten verweisen, auf die eine Empfängeranwendung zugreifen kann.
Rich Content zu Textvorschauen hinzufügen
Ab Android 10 (API-Level 29) wird im Android-Freigabebereich eine Vorschau des geteilten Texts angezeigt. In einigen Fällen kann geteilter Text schwer verständlich sein. Angenommen, Sie möchten eine komplizierte URL wie https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
teilen. Eine detailliertere Vorschau kann Nutzern verdeutlichen, was geteilt wird.
Wenn Sie eine Textvorschau anzeigen, können Sie einen Titel, ein Thumbnail oder beides festlegen. Füge Intent.EXTRA_TITLE
eine Beschreibung hinzu, bevor du Intent.createChooser()
aufrufst, und verwende ClipData
, um ein relevantes Thumbnail hinzuzufügen.
Hinweis: Der URI des Bildinhalts wird von einer FileProvider
bereitgestellt, in der Regel von einer konfigurierten <cache-path>
.
Weitere Informationen finden Sie unter Dateien freigeben. Geben Sie
Sharesheet die richtigen Berechtigungen, um jedes Bild, das du als Thumbnail verwenden möchtest, zu lesen. Weitere Informationen
siehe Intent.FLAG_GRANT_READ_URI_PERMISSION
.
Beispiel:
val share = Intent.createChooser(Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/") // (Optional) Here you're setting the title of the content putExtra(Intent.EXTRA_TITLE, "Introducing content previews") // (Optional) Here you're passing a content URI to an image to be displayed data = contentUri flags = Intent.FLAG_GRANT_READ_URI_PERMISSION }, null) startActivity(share)
Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/"); // (Optional) Here you're setting the title of the content sendIntent.putExtra(Intent.EXTRA_TITLE, "Introducing content previews"); // (Optional) Here you're passing a content URI to an image to be displayed sendIntent.setData(contentUri); sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Show the Sharesheet startActivity(Intent.createChooser(sendIntent, null));
Die Vorschau sieht in etwa so aus:

Freigabebereich um benutzerdefinierte Aktionen ergänzen

Screenshot von benutzerdefinierten Aktionen im Android-Freigabebereich
Unter Android 14 (API-Level 34) und höher können Apps dem Android-Freigabe-Menü benutzerdefinierte Aktionen hinzufügen.
Die benutzerdefinierten Aktionen werden oben im Android-Freigabe-Sheet als kleine Aktionssymbole angezeigt. Apps können eine beliebige Intent
als Aktion angeben, die beim Klicken auf das Symbol aufgerufen wird.
Wenn Sie dem Android-Freigabe-Menü benutzerdefinierte Aktionen hinzufügen möchten, erstellen Sie zuerst eine ChooserAction
mit ChooserAction.Builder
.
Sie können eine PendingIntent
als Aktion angeben, die beim Anklicken des Symbols aufgerufen wird. Erstelle ein Array mit allen benutzerdefinierten Aktionen und gib es als EXTRA_CHOOSER_CUSTOM_ACTIONS
der Freigabe Intent
an.
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Benutzerdefinierte Ziele hinzufügen
Im Android-Freigabebereich können Sie bis zu zwei ChooserTarget
-Objekte angeben, die angezeigt werden, bevor die Freigabe-Verknüpfungen und Auswahlziele aus ChooserTargetServices
geladen werden. Sie können auch
Sie können bis zu zwei Intents angeben, die auf aufgelistete Aktivitäten verweisen.
vor den App-Vorschlägen ein:

Fügen Sie dem Intent „Teilen“ Intent.EXTRA_CHOOSER_TARGETS
und Intent.EXTRA_INITIAL_INTENTS
nach dem Aufruf von Intent.createChooser()
hinzu:
val share = Intent.createChooser(myShareIntent, null).apply { putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray) putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray) }
Intent shareIntent = Intent.createChooser(sendIntent, null); share.putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray); share.putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray);
Verwenden Sie diese Funktion mit Vorsicht. Jeden benutzerdefinierten Intent
und ChooserTarget
, die Sie hinzufügen, reduziert die vom System vorgeschlagene Anzahl. In der Regel
raten wir davon ab, benutzerdefinierte Ziele hinzuzufügen. Ein häufiges Beispiel für die Verwendung von Intent.EXTRA_INITIAL_INTENTS
ist die Angabe zusätzlicher Aktionen, die Nutzer auf freigegebene Inhalte ausführen können. Ein Nutzer teilt beispielsweise Bilder und Intent.EXTRA_INITIAL_INTENTS
wird verwendet, um ihm zu ermöglichen, stattdessen einen Link zu senden. Ein gängiges geeignetes Beispiel für das Hinzufügen von Intent.EXTRA_CHOOSER_TARGETS
besteht darin, relevante Personen oder Geräte zu präsentieren, die deine App bietet.
Bestimmte Ziele nach Komponente ausschließen
Sie können bestimmte Ziele ausschließen, indem Sie Intent.EXTRA_EXCLUDE_COMPONENTS
angeben.
Entfernen Sie nur Ziele, über die Sie die Kontrolle haben. Ein häufiger Anwendungsfall besteht darin,
App-Freigabeziele festlegen, wenn Nutzer Inhalte innerhalb Ihrer App teilen, da sie diese wahrscheinlich teilen werden
außerhalb Ihrer App.
Fügen Sie Ihrem Intent Intent.EXTRA_EXCLUDE_COMPONENTS
hinzu, nachdem Sie Intent.createChooser()
aufgerufen haben:
val share = Intent.createChooser(Intent(), null).apply { // Only use for components you have control over val excludedComponentNames = arrayOf(ComponentName("com.example.android", "ExampleClass")) putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames) }
Intent shareIntent = Intent.createChooser(new Intent(), null); // Only use for components you have control over ComponentName[] excludedComponentNames = { new ComponentName("com.example.android", "ExampleClass") }; shareIntent.putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames);
Informationen zur Freigabe
Es kann hilfreich sein, zu wissen, wann Ihre Nutzer Inhalte teilen und welches Ziel sie auswählen. Die
Mit Android Sharesheet kannst du diese Informationen abrufen, indem du die ComponentName
von
die Ihre Nutzer auswählen, mit einem IntentSender
.
Erstellen Sie zuerst eine PendingIntent
für eine BroadcastReceiver
und geben Sie die IntentSender
in Intent.createChooser()
an:
var share = Intent(Intent.ACTION_SEND) // ... val pi = PendingIntent.getBroadcast( myContext, requestCode, Intent(myContext, MyBroadcastReceiver::class.java), PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ) share = Intent.createChooser(share, null, pi.intentSender)
Intent share = new Intent(ACTION_SEND); ... PendingIntent pi = PendingIntent.getBroadcast(myContext, requestCode, new Intent(myContext, MyBroadcastReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); share = Intent.createChooser(share, null, pi.getIntentSender());
Sie erhalten den Rückruf in MyBroadcastReceiver
und sehen sich Intent.EXTRA_CHOSEN_COMPONENT
an:
override fun onReceive(context: Context, intent: Intent) { ... val clickedComponent : ComponentName = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
@Override public void onReceive(Context context, Intent intent) { ... ComponentName clickedComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
Benutzerdefinierte Aktionen zum Sharesheet hinzufügen
Auf Geräten mit Android 14 (API-Level 34) und höher können dem Android-Sharesheet benutzerdefinierte Aktionen hinzugefügt werden.
ChooserAction
erstellen
mit
ChooserAction.Builder
.
Sie können eine PendingIntent
als Aktion angeben, die beim Klicken auf das Symbol ausgeführt wird. Erstelle ein Array mit allen benutzerdefinierten Aktionen und gib es als EXTRA_CHOOSER_CUSTOM_ACTIONS
der Freigabe Intent
an.
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
Android-Intent-Resolver verwenden

Screenshot des Intent-Resolvers für ACTION_SEND
Der Intent-Resolver von Android wird am besten verwendet, wenn Daten im Rahmen eines klar definierten Aufgabenablaufs an eine andere App gesendet werden.
Um den Android-Intent-Resolver zu verwenden, erstellen Sie einen Intent und fügen Sie Extras hinzu, wie Sie es nennen würden
das Android Sharesheet. Rufen Sie jedoch nicht an.
Intent.createChooser()
Wenn mehrere installierte Anwendungen mit Filtern installiert sind, die mit ACTION_SEND
und dem MIME-Typ übereinstimmen, wird vom System ein Dialogfeld zur ‑Auflösung namens Intent Resolver angezeigt, in dem der Nutzer ein Ziel für die Freigabe auswählen kann. Wenn eine einzelne Anwendung
stimmt, läuft er.
Hier ist ein Beispiel für die Verwendung des Android-Intent-Resolvers zum Senden von Text:
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } startActivity(sendIntent)
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent);
Weitere Informationen
Weitere Informationen zum Senden von Daten finden Sie unter Intents und Intent-Filter.