Eine App kann Daten nicht nur an andere Apps senden, sondern auch von anderen Apps empfangen. und Apps. Überlegen Sie, wie Nutzende mit Ihrer Anwendung interagieren und welche Daten Typen, die Sie von anderen Anwendungen erhalten möchten. Ein soziales Netzwerk Netzwerk-App an Textinhalten interessiert sein könnte, wie z. B. interessante Web-URL aus einer anderen App.
Nutzer anderer Apps senden häufig Daten über das Android-Gerät Sharesheet oder Intent-Resolver Apps, die Daten an deine App senden, müssen eine MIME-Typ für diese Daten. Ihre App kann Daten empfangen, die von einer anderen App im auf folgende Arten:
- Ein
Activity
mit einem übereinstimmendenintent-filter
-Tag im Manifest - Von deiner App veröffentlichte Verknüpfungen werden geteilt.
Direktes Teilen-Ziele sind Deeplinks zu einer bestimmten Aktivität in Ihrer App. Sie stehen oft für eine Person oder Gruppe und das Android Sharesheet zeigt sie. Eine Messaging-App kann beispielsweise ein Ziel für die direkte Freigabe für eine Person bereitstellen, das Deeplinks direkt zu einer Unterhaltung mit dieser Person enthält. Weitere Informationen finden Sie unter Geben Sie Direct Share-Ziele an, um detaillierte Informationen Anleitung.
Unterstützung von MIME-Typen
Im Idealfall muss eine App die größtmögliche Anzahl von MIME-Typen empfangen können.
Beispiel: eine Messaging-App zum Senden von Text, Bildern und Videos
unterstützt idealerweise den Empfang von text/*
, image/*
und video/*
. Hier sind einige
Gängige MIME-Typen für das Senden und Empfangen einfacher Daten in Android
Empfänger registrieren sich für | Absender senden |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Unterstützte Dateiendungen | application/pdf |
Weitere Informationen finden Sie in der offiziellen MIME-Medientyp-Registry der IANA.
Gute Ziele fürs Teilen
Wenn ein Nutzer auf ein Freigabeziel tippt, das mit einer bestimmten Aktivität verknüpft ist, sollte er die geteilten Inhalte bestätigen und bearbeiten können, bevor er sie verwendet. Dies ist besonders wichtig für Textdaten.
Daten zu einer Aktivität erhalten
Der Empfang von Daten mit einer Aktivität umfasst die Aktualisierung Ihres Manifests, die Verarbeitung der und dafür zu sorgen, dass Nutzer Ihre App wiedererkennen.
Manifest aktualisieren
Mithilfe von Intent-Filtern wird das System darüber informiert, welche Intents von einer App-Komponente akzeptiert werden.
Ähnlich wie beim Erstellen eines Intents mit einer ACTION_SEND
-Aktion im
Einfache Daten an andere Apps senden
erstellen Sie Intent-Filter, um mit dieser Aktion Intents zu empfangen. Ich
definiere in deinem Manifest mit dem Element <intent-filter>
einen Intent-Filter.
Wenn deine App beispielsweise den Empfang von Textinhalten verarbeitet, ist ein Manifest, das
Bilder eines beliebigen Typs enthält, würde wie das folgende Snippet aussehen:
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
Wenn eine andere App versucht, eines dieser Elemente durch Erstellen eines
Intent und übergeben ihn an startActivity()
, Ihre Anwendung
wird als Option im Android-Sharesheet oder im Intent-Resolver aufgeführt. Wenn der Nutzer
Ihre App auswählt, wird die entsprechende Aktivität gestartet (.ui.MyActivity
in
im vorherigen Beispiel). Dann liegt es an Ihnen, den Inhalt entsprechend zu handhaben.
im Code und in der Benutzeroberfläche.
Eingehende Inhalte verarbeiten
Um die von einem Intent
übermittelten Inhalte zu verarbeiten, rufe Folgendes auf:
getIntent()
, um das Intent
-Objekt abzurufen. Sobald Sie das Objekt haben,
können Sie den Inhalt überprüfen, um zu entscheiden, was Sie als Nächstes tun sollten. Wenn durch diese Aktivität
von anderen Bereichen des Systems (z. B. Launcher) aus gestartet werden,
bei der Untersuchung der Absicht
berücksichtigen.
Überprüfen Sie die eingehenden Daten besonders sorgfältig. Sie wissen nie, was andere erhalten. Möglicherweise ist der falsche MIME-Typ festgelegt oder der das gesendete Bild möglicherweise extrem groß ist. Denken Sie auch daran, Binärdaten zu verarbeiten, in einem separaten Thread statt im Hauptthread („UI“).
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... when { intent?.action == Intent.ACTION_SEND -> { if ("text/plain" == intent.type) { handleSendText(intent) // Handle text being sent } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } intent?.action == Intent.ACTION_SEND_MULTIPLE && intent.type?.startsWith("image/") == true -> { handleSendMultipleImages(intent) // Handle multiple images being sent } else -> { // Handle other intents, such as being started from the home screen } } ... } private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update UI to reflect text being shared } } private fun handleSendImage(intent: Intent) { (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let { // Update UI to reflect image being shared } } private fun handleSendMultipleImages(intent: Intent) { intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let { // Update UI to reflect multiple images being shared } }
Java
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
Die Aktualisierung der Benutzeroberfläche nach dem Empfang der Daten kann so einfach sein wie das Ausfüllen eines
EditText
oder mehr
wie ein interessanter Fotofilter
auf ein Bild anzuwenden. Es liegt an
was als Nächstes passiert.
Sicherstellen, dass Nutzer Ihre App erkennen
Ihre App wird durch ihre icon- und label in Android Sharesheet und Intent-Resolver Beide werden im Manifest definiert. Sie können Legen Sie Aktivitäts- oder Intent-Filterlabels fest, um mehr Kontext bereitzustellen.
Ab Android 10 (API-Level 29) werden im Android-Sharesheet nur noch Symbole verwendet, die
das Manifest in Ihrem application
-Tag. Android ignoriert Symbole auf
intent-filter
- und activity
-Tags.