Abfangen von Links aus dem Browser, um meine Android-App zu öffnen


107

Ich möchte meine App auffordern können, einen Link zu öffnen, wenn der Benutzer auf eine URL eines bestimmten Musters klickt, anstatt dem Browser das Öffnen zu ermöglichen. Dies kann der Fall sein, wenn sich der Benutzer auf einer Webseite im Browser oder in einem E-Mail-Client oder in einem WebView in einer frisch geprägten App befindet.

Klicken Sie beispielsweise von einer beliebigen Stelle im Telefon auf einen YouTube-Link, und Sie haben die Möglichkeit, die YouTube-App zu öffnen.

Wie erreiche ich das für meine eigene App?


Antworten:


141

Verwenden Sie eine android.intent.action.VIEW der Kategorie android.intent.category.BROWSABLE .

Von Romain Guy Fotostream App 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 Sie sich in der Aktivität befinden , müssen Sie nach der Aktion suchen und dann etwas mit der URL tun, die Sie erhalten haben. Die Intent.getData()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 sollte jedoch beachtet werden, dass diese App etwas veraltet ist (1.2), sodass Sie möglicherweise bessere Möglichkeiten finden, dies zu erreichen.


8
Beachten Sie Folgendes: Ihr Benutzer hat die Wahl, die geeignete App zu verwenden, da Sie lediglich Ihre App als Handler registrieren müssen. Persönlich (als Benutzer)
ärgere

1
Dies funktioniert nicht für HTC-Telefone. Wie kann ich es auf HTC-Handys zum Laufen bringen?
user484691

57
Möglicherweise möchten Sie intent.getDataString () anstelle von getData () verwenden, wenn Sie sich für die vollständige URL einschließlich des Querystrings interessieren. Dieser Kommentar spart Ihnen die Stunde, die es mich nur gekostet hat ..... :-(
Kenton Price

Wird dies für jede URL aufgerufen, zu der der Benutzer von einer App oder nur vom nativen Browser aus navigiert?
Gonzobrains

1
Von jeder App (die die Intent.ACTION_VIEW-Absicht verwendet)
Jamesh


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;
    }

}

4
Vielen Dank. Dies ist nützlich in dem Kontext, in dem Sie die Webansicht besitzen. Die Frage, die ich gestellt habe, war, wie ich meine App dazu bringen kann, einen Klick auf einen Link in einer App (z. B. dem Browser) abzufangen.
Jamesh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.