Ich habe mich gefragt, wie Android-Anwendungen und Android den Share-Button und den Share-Mechanismus implementieren. Wenn ich beispielsweise auf YouTube auf die Schaltfläche "Teilen" klicke, wird eine Liste der Apps angezeigt, die für die Freigabe freigegeben werden sollen. Wie wird diese Liste ermittelt? Gibt es eine bestimmte "Teilen" -Absicht, und dann werden alle Stellen angezeigt, die in der Lage sind, die in den Absichts-Extras angegebene Absicht zu teilen? Wie lautet der technische Name des Entwurfsmusters, mit dem dies implementiert wird? Vielen Dank.
share-menu
intents
Jack Maddington
quelle
quelle
Antworten:
Dies besteht aus zwei Teilen: dem Mechanismus, mit dem die Kommunikations-Apps sagen, dass sie Dinge teilen können, und dem Mechanismus, mit dem die Apps Inhalte teilen können. Ich werde mich nacheinander mit ihnen befassen, aber zuerst eine kurze Anmerkung zu den Absichten .
Absichten
Die Absicht in Android ist, was zum Starten einer App verwendet wird. Es kann wie eine Verknüpfung oder wie eine Windows-Dateizuordnung funktionieren. Die Absicht kann den Namen der zu startenden App angeben, muss dies aber nicht. Es kann auch die auszuführende Aktion (z. B. "Hauptaktivität öffnen", "Diese URL anzeigen", "Kalendereintrag erstellen") und den MIME-Typ des Objekts angeben, auf das es angewendet werden soll (z. B. das Objekt, das Sie anzeigen möchten hat Typ image / jpeg). Einige Namen von Aktionen sind spezifisch für eine bestimmte App, aber viele sind von Android standardisiert, damit Apps interagieren können.
Absichtsfilter und Kommunikations-App
Jede App gibt Absichtsfilter an, um anzugeben , welche Art von Aktionen sie ausführen kann. Beispiel: Eine Bildbetrachter-App registriert einen Absichtsfilter für "Diese URL anzeigen", wobei der MIME-Typ "Bild / *" lautet. Ein Webbrowser würde einen Absichtsfilter für "Diese URL anzeigen" registrieren, wobei das URL-Schema "http" oder "https" lautet. Um Dinge teilen zu können, registriert eine App einen Absichtsfilter für die "Sende" -Absicht, entweder mit einem bestimmten Typ (z. B. wenn nur Fotos geteilt werden können) oder für einen beliebigen Typ.
Inhalts-App
Die App, die Inhalte freigeben möchte, erstellt eine Absicht mit der Aktion "Freigeben" und einer URL, die auf den freizugebenden Inhalt verweist. (Dies ist häufig eine "temporäre" URL, die der empfangenden App temporären Zugriff auf die Datei im privaten Speicher der Inhalts-App oder auf einen von der Inhalts-App generierten Stream gewährt.) Sie gibt nicht den Namen einer App an, mit der die App verarbeitet werden soll Absicht. Anschließend gibt es dem Android-Framework diese Absicht und fordert Android auf, den Auswahldialog anzuzeigen . Android vergleicht die Absicht mit den Absichtsfiltern aller installierten Apps, erstellt die Liste und zeigt sie dem Benutzer an. Wenn der Benutzer eine bestimmte App auswählt, startet Android diese App und übergibt ihr die Absicht. Die App verwendet die URL, um den Inhalt der ursprünglichen App abzurufen.
Neu in Marshmallow: Direct Share
In Marshmallow gibt es einen anderen Mechanismus namens Direct Share . Dies ergänzt den Absichtsmechanismus, sodass Sie Personen oder Gruppen auswählen können, die Sie direkt im Auswahldialog freigeben möchten, und den zusätzlichen Schritt "An wen möchten Sie ihn senden?" Überspringen. Dies funktioniert etwas anders: Die Kommunikations-App muss einen Dienst bereitstellen. Wenn die App mit dem Inhalt nach einer Auswahl fragt, startet Android den Dienst für jede relevante App. Der Dienst gibt eine Liste relevanter Freigabeziele zurück , und Android fügt alle diese separaten Listen zu der Liste zusammen, die im Dialogfeld angezeigt wird.
quelle
Ich bin kein Entwickler, daher kann ich nur eine
Manifest
grobe Erklärung geben: Apps geben an, in welchen Mimetypen sie verstehen und bereit sind, auf Freigabeaktionen zu reagieren. Dazu definieren sie sogenannte "Intent-Filter", zB:Wenn Sie also auf die Schaltfläche "Teilen" klicken, wird der zu teilende Inhalt ausgewertet und mit Apps abgeglichen, die ihre Bereitschaft zum Empfang des Formats erklärt haben.
Quellen:
quelle