Angenommen, ich möchte einen URI wie den folgenden definieren:
myapp://path/to/what/i/want?d=This%20is%20a%20test
muss von meiner eigenen Anwendung oder meinem eigenen Dienst bearbeitet werden. Beachten Sie, dass das Schema ist "myapp"
und nicht "http"
, oder "ftp"
. Genau das beabsichtige ich: mein eigenes URI-Schema global für das Android-Betriebssystem zu definieren. Ist das möglich?
Dies ist etwas analog zu dem, was einige Programme bereits auf Windows-Systemen wie Skype ( skype://
) oder einem Torrent-Downloader-Programm ( torrent://
) ausführen .
Antworten:
Das ist sehr gut möglich; Sie definieren das URI-Schema in Ihrer AndroidManifest.xml mithilfe des
<data>
Elements. Sie richten einen Absichtsfilter mit dem<data>
ausgefüllten Element ein und können Ihr eigenes Schema erstellen. ( Mehr zu Absichtsfiltern und Vorsatzauflösung hier .)Hier ist ein kurzes Beispiel:
Je nachdem, wie implizite Absichten funktionieren, müssen Sie mindestens eine Aktion und eine Kategorie definieren. Hier habe ich VIEW als Aktion ausgewählt (obwohl es alles sein könnte) und sichergestellt, dass die Kategorie DEFAULT hinzugefügt wird (da dies für alle impliziten Absichten erforderlich ist). Beachten Sie auch, wie ich die Kategorie BROWSABLE hinzugefügt habe - dies ist nicht erforderlich, ermöglicht jedoch das Öffnen Ihrer URIs über den Browser (eine nützliche Funktion).
quelle
Ergänzung der @DanielLew Antwort zu , um die Werte der Parameter zu erhalten:
URI-Beispiel:
myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
in Ihrer Tätigkeit:
quelle
http://www.host.com/directory/value
? Wie können wir das bekommenvalue
?uri.getLastPathSegment();
Ich empfehle dringend, dass Sie kein eigenes Schema definieren. Dies steht im Widerspruch zu den Webstandards für URI-Schemata, die aus gutem Grund versuchen, diese Namen streng zu kontrollieren - um Namenskonflikte zwischen verschiedenen Entitäten zu vermeiden. Sobald Sie auf einer Website einen Link zu Ihrem Schema eingefügt haben, haben Sie diesen kleinen Namen in den gesamten Namespace des gesamten Internets eingefügt und sollten diesen Standards folgen.
Wenn Sie nur einen Link zu Ihrer eigenen App haben möchten, empfehle ich Ihnen, den hier beschriebenen Ansatz zu befolgen:
Wie registriere ich einen URL-Namespace (myapp: //app.start/) für den Zugriff auf Ihr Programm, indem ich eine URL im Browser unter Android OS aufrufe?
quelle
Ein anderer alternativer Ansatz zu Diego ist die Verwendung einer Bibliothek:
https://github.com/airbnb/DeepLinkDispatch
Sie können die URIs, die Sie verarbeiten möchten, und die Parameter, die Sie durch Anmerkungen zur Aktivität extrahieren möchten, einfach deklarieren:
Als Plus werden die Abfrageparameter auch an die Aktivität weitergegeben.
quelle
Da die Frage vor Jahren gestellt wurde und Android sich in diesem URI-Schema stark weiterentwickelt hat.
Vom ursprünglichen URI-Schema über Deep Link bis hin zu Android App Links.
Android empfiehlt jetzt, HTTP-URLs zu verwenden und kein eigenes URI-Schema zu definieren. Da Android-App-Links HTTP-URLs verwenden, die auf eine Website-Domain verweisen, die Sie besitzen, kann keine andere App Ihre Links verwenden. Sie können den Vergleich von Deep - Link überprüfen und Android App - Links von hier
Jetzt können Sie mithilfe der Android Studio-Option ganz einfach ein URI-Schema hinzufügen: Extras> App Links Assistant. Weitere Informationen finden Sie im Android-Dokument: https://developer.android.com/studio/write/app-link-indexing.html
quelle