105 votes

Intercepter les liens du navigateur pour ouvrir mon application Android

J'aimerais pouvoir demander à mon application d'ouvrir un lien lorsque l'utilisateur clique sur une URL d'un modèle donné au lieu de laisser le navigateur l'ouvrir. Cela peut se produire lorsque l'utilisateur se trouve sur une page Web dans le navigateur, ou dans un client de messagerie, ou dans une WebView dans une application récente.

Par exemple, cliquez sur un lien YouTube depuis n'importe quel endroit du téléphone et vous aurez la possibilité d'ouvrir l'application YouTube.

Comment puis-je réaliser cela pour ma propre application ?

141voto

jamesh Points 9849

Utiliser un Android.intent.action.VIEW de catégorie Android.intent.category.BROWSABLE .

De Romain Guy Photostream de l'application 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>

Une fois à l'intérieur, vous êtes dans le activité vous devez rechercher l'action, puis faire quelque chose avec l'URL qui vous a été remise. Le site Intent.getData() vous donne un 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);
        }
    }

Il convient toutefois de noter que cette application commence à dater un peu (1.2) et qu'il existe peut-être de meilleurs moyens d'y parvenir.

2voto

Cao Dongping Points 859

Il existe des bibliothèques qui analysent les paramètres de l'url automatiquement.

comme

https://github.com/airbnb/DeepLinkDispatch

&&

https://github.com/mzule/ActivityRouter

Le dernier est écrit par moi. Qui peut analyser les paramètres selon le type donné, pas toujours String.

Exemple

@Router(value = "main/:id" intExtra = "id")
...
int id = getIntent().getInt("id", 0);

0voto

Dacx Points 27
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;
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X