Abfangen von Links aus dem Browser, um meine Android -App zu öffnen
-
05-07-2019 - |
Frage
Ich möchte in der Lage sein, meine App zum Öffnen eines Links fordern zu können, wenn der Benutzer auf eine URL eines bestimmten Musters klickt, anstatt dem Browser ihn zu öffnen. Dies kann sein, wenn sich der Benutzer auf einer Webseite im Browser oder in einem E-Mail-Client oder in einer Webview in einer frischminenzierten App befindet.
Klicken Sie beispielsweise von überall im Telefon auf einen YouTube -Link von überall vom Telefon und Sie erhalten die Möglichkeit, die YouTube -App zu öffnen.
Wie erreiche ich das für meine eigene App?
Lösung
Verwenden Sie eine Android.intent.Action.View der Kategorie Android.intent.Category.Browsable.
Von Romain Guy's Foto-Stream Apps AndroidManifest.xml,
<activity
android:name=".PhotostreamActivity"
android:label="@string/application_name">
<!-- ... -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"
android:host="flickr.com"
android:pathPrefix="/photos/" />
<data android:scheme="http"
android:host="www.flickr.com"
android:pathPrefix="/photos/" />
</intent-filter>
</activity>
Sobald du drinnen bist Aktivität, Sie müssen nach der Aktion suchen und dann etwas mit der URL tun, die Ihnen übergeben wurde. Das Intent.getData()
Die Methode gibt Ihnen einen URI.
final Intent intent = getIntent();
final String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
final List<String> segments = intent.getData().getPathSegments();
if (segments.size() > 1) {
mUsername = segments.get(1);
}
}
Es ist jedoch zu beachten, dass diese App ein wenig veraltet ist (1.2), sodass Sie möglicherweise bessere Möglichkeiten gibt, dies zu erreichen.
Andere Tipps
Es gibt einige Bibliotheken, die Parameter von URL automatisch analysieren.
wie zum Beispiel
https://github.com/airbnb/deeplinkdispatch
&&
https://github.com/mzule/activityrouter
Der spätere wird von mir geschrieben. Dies kann Parameter an einen bestimmten Typ analysieren, nicht immer Zeichenfolge.
Beispiel
@Router(value = "main/:id" intExtra = "id")
...
int id = getIntent().getInt("id", 0);
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
setUrlparams(url);
if (url.indexOf("pattern") != -1) {
// do something
return false;
} else {
view.loadUrl(url);
}
return true;
}
}