Question

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 permettre au navigateur de l'ouvrir. Cela peut être le cas lorsque l'utilisateur se trouve sur une page Web du navigateur, dans un client de messagerie ou dans une vue Web dans une application fraîchement imprimée.

Par exemple, cliquez sur un lien YouTube de n’importe où dans le téléphone pour avoir la possibilité d’ouvrir l’application YouTube.

Comment puis-je y parvenir pour ma propre application?

Était-ce utile?

La solution

Utilisez un android.intent.action.VIEW de la catégorie android.intent .category.BROWSABLE .

De Photostream de l'application de Romain Guy 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 créer quelque chose avec l'URL que vous avez reçue. La méthode 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 devient un peu obsolète (1.2). Vous découvrirez donc qu'il existe de meilleurs moyens d'y parvenir.

Autres conseils

Certaines bibliothèques analysent les paramètres de l'url automatiquement.

tel que

https://github.com/airbnb/DeepLinkDispatch

& amp; & amp;

https://github.com/mzule/ActivityRouter

Le dernier est écrit par moi. Ce 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);
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;
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top