Kann mich bitte jemand anleiten, wie ich meine Android-Anwendung über den Android-Browser starten kann?
quelle
Kann mich bitte jemand anleiten, wie ich meine Android-Anwendung über den Android-Browser starten kann?
Verwenden Sie ein <intent-filter>
mit einem <data>
Element. Wenn Sie beispielsweise alle Links zu twitter.com bearbeiten möchten, fügen Sie dies <activity>
in Folgendes ein AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Wenn der Benutzer dann im Browser auf einen Link zu Twitter klickt, wird er gefragt, welche Anwendung er verwenden soll, um die Aktion abzuschließen: den Browser oder Ihre Anwendung.
Wenn Sie eine enge Integration zwischen Ihrer Website und Ihrer App gewährleisten möchten, können Sie natürlich Ihr eigenes Schema definieren:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Dann können Sie in Ihre Web-App Links einfügen wie:
<a href="my.special.scheme://other/parameters/here">
Und wenn der Benutzer darauf klickt, wird Ihre App automatisch gestartet (da sie wahrscheinlich die einzige ist, die mit my.special.scheme://
Uristypen umgehen kann). Der einzige Nachteil dabei ist, dass der Benutzer einen bösen Fehler erhält, wenn er die App nicht installiert hat. Und ich bin mir nicht sicher, ob es eine Möglichkeit gibt, dies zu überprüfen.
Bearbeiten: Um Ihre Frage zu beantworten, können Sie verwenden, getIntent().getData()
welche ein Uri
Objekt zurückgibt . Sie können dann Uri.*
Methoden verwenden, um die benötigten Daten zu extrahieren. Angenommen, der Benutzer hat auf einen Link geklickt zu http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Sie können das oben genannte überall in Ihrem tun Activity
, aber Sie werden es wahrscheinlich in tun wollen onCreate()
. Sie können auch verwenden params.size()
, um die Anzahl der Pfadsegmente in der zu ermitteln Uri
. Weitere Uri
Methoden, mit denen Sie bestimmte Teile extrahieren können, finden Sie auf javadoc oder auf der Android-Entwickler-Website .
android:exported="true"
zu bringen, muss seinActivity
Manifest ergänzen . Überprüfen Sie diese Antwort stackoverflow.com/a/13044911/1276636Alle oben genannten Antworten haben bei mir
CHROME
zum 28. Januar 2014 nicht funktioniertMeine App wurde ordnungsgemäß über http://example.com/someresource/ Links von Apps wie Hangouts, Google Mail usw. gestartet, jedoch nicht über den Chrome-Browser.
Um dies zu lösen, damit es ordnungsgemäß von CHROME gestartet wird, müssen Sie den Absichtsfilter wie folgt einstellen
Beachten Sie das
pathPrefix
ElementIhre App wird jetzt in der Aktivitätsauswahl angezeigt, wenn der Benutzer das Muster http://example.com/someresource/ vom Chrome-Browser anfordert, indem er auf einen Link in den Google-Suchergebnissen oder auf einer anderen Website klickt
quelle
Bitte beachten Sie meinen Kommentar hier: Einen Link im Android-Browser erstellen meine App starten?
Wir raten Menschen dringend davon ab, ihre eigenen Systeme zu verwenden, es sei denn, sie definieren ein neues weltweites Internet-System.
quelle
In meinem Fall musste ich zwei Kategorien für das festlegen
<intent-filter>
und dann funktionierte es:quelle
Zum Beispiel haben Sie die nächsten Dinge:
Dann müssen Sie als nächstes tun:
1) Fügen Sie Ihrer Aktivität einen Absichtsfilter hinzu (kann eine beliebige Aktivität sein. Weitere Informationen finden Sie in der Dokumentation ).
2) Erstellen Sie eine HTML-Datei, um den Link zu testen, oder verwenden Sie diese Methoden.
3) Verwenden Sie Mobile Chrome zum Testen
4) Das war's.
Und es ist nicht notwendig, eine App auf dem Markt zu veröffentlichen, um Deep Linking zu testen =)
Weitere Informationen finden Sie in der Dokumentation und in der nützlichen Präsentation .
quelle
Es sollte auch
<category android:name="android.intent.category.BROWSABLE"/>
zum Absichtsfilter hinzugefügt werden, damit die Aktivität über den Link richtig erkannt wird.quelle
Der folgende Link enthält Informationen zum Starten der App (falls installiert) direkt über den Browser. Andernfalls wird die App direkt im Play Store geöffnet, sodass der Benutzer sie nahtlos herunterladen kann.
https://developer.chrome.com/multidevice/android/intents
quelle
Bitte beachten Sie, wenn Ihr Symbol bei der Implementierung dieser Funktion aus dem Android Launcher verschwindet, müssen Sie den Intent-Filter aufteilen.
quelle
Ja, Chrome sucht, anstatt nach einem Schema zu suchen. Wenn Sie Ihre App über das URI-Schema starten möchten, verwenden Sie diese coole Dienstprogramm-App im Play Store. Es hat mir den Tag gerettet :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
quelle
Xamarin Hafen von Felix 'Antwort
In Ihrem
MainActivity
, fügen Sie diese ( docs: Android.App.IntentFilterAttribute Klasse ):Xamarin wird
AndroidManifest.xml
für Sie Folgendes hinzufügen :Und um Parameter zu erhalten ( ich habe in OnCreate of MainActivity getestet ):
Soweit ich weiß, kann das oben Genannte in jeder Aktivität hinzugefügt werden, nicht nur in MainActivity
Anmerkungen:
OnCreate
Ereignis der AppMainLauncher Activity
erneut ausgelöst wird.<a href="my.special.scheme://host/arg1/arg2">
Im obigen letzten Code werden Snippet-Werte angezeigt:quelle
Felix 'Ansatz zum Umgang mit Deep Links ist der typische Ansatz zum Umgang mit Deep Links. Ich würde auch vorschlagen, diese Bibliothek zu überprüfen, um das Routing und Parsen Ihrer Deep Links zu handhaben:
https://github.com/airbnb/DeepLinkDispatch
Sie können Anmerkungen verwenden, um Ihre Aktivität für einen bestimmten Deep Link-URI zu registrieren, und die Parameter werden für Sie extrahiert, ohne dass Sie die üblichen Schritte zum Abrufen der Pfadsegmente, zum Abgleichen usw. ausführen müssen. Sie können einfach Anmerkungen und Aktivitäten wie diese ausführen ::
quelle
Hey, ich habe die Lösung. Ich habe die Kategorie nicht als "Standard" festgelegt. Außerdem habe ich die Hauptaktivität für die Absichtsdaten verwendet. Jetzt verwende ich eine andere Aktivität für die Absichtsdaten. Danke für die Hilfe. :) :)
quelle
Sie müssen der CALLBACK_URL 'app: //' einen Pseudo-Hostnamen hinzufügen, der als URL keinen Sinn ergibt und nicht analysiert werden kann.
quelle
example.php:
quelle
Schau @JRuns Antwort hier rein . Die Idee ist, HTML mit Ihrem benutzerdefinierten Schema zu erstellen und es irgendwo hochzuladen. Wenn Sie dann auf Ihren benutzerdefinierten Link in Ihrer HTML-Datei klicken, werden Sie zu Ihrer App weitergeleitet. Ich habe diesen Artikel für Android verwendet. Vergessen Sie jedoch nicht, das vollständige
Name = "MyApp.Mobile.Droid.MainActivity"
Namensattribut für Ihre Zielaktivität festzulegen.quelle
Stand 15.06.2019
Was ich getan habe, ist, alle vier Möglichkeiten zum Öffnen der URL einzuschließen.
dh mit
http
/https
und 2 mitwww
im Präfix und 2 ohnewww
Mit dieser Option wird meine App jetzt automatisch gestartet, ohne dass ich aufgefordert werde, einen Browser und eine andere Option auszuwählen.
quelle