Einfache Daten aus anderen Apps erhalten

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 übereinstimmenden intent-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/*
  • text/plain
  • text/rtf
  • text/html
  • text/json
`image/*`
  • image/jpg
  • image/png
  • image/gif
video/*
  • video/mp4
  • video/3gp
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.