Intercepter des liens depuis le navigateur pour ouvrir mon application Android

J’aimerais pouvoir inviter mon application à 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 lorsque l’utilisateur est sur une page Web dans le navigateur ou dans un client de messagerie ou dans une WebView dans une application fraîchement créée.

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

Comment puis-je y parvenir pour ma propre application?

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

À partir de l’application AndroidManifest.xml de l’appli Photostream de Romain Guy,

          

Une fois à l’intérieur de l’ activité , vous devez rechercher l’action, puis faire quelque chose avec l’URL que vous avez reçue. La méthode Intent.getData() vous donne un Uri.

  final Intent intent = getIntent(); final Ssortingng action = intent.getAction(); if (Intent.ACTION_VIEW.equals(action)) { final List segments = intent.getData().getPathSegments(); if (segments.size() > 1) { mUsername = segments.get(1); } } 

Il convient de noter, cependant, que cette application est un peu obsolète (1.2), donc vous trouverez peut-être de meilleurs moyens d’y parvenir.

Certaines bibliothèques parsingnt automatiquement les parameters de l’URL.

tel que

https://github.com/airbnb/DeepLinkDispatch

&&

https://github.com/mzule/ActivityRouter

Le dernier est écrit par moi. Qui peut parsingr les parameters à un type donné, pas toujours à la chaîne.

Exemple

 @Router(value = "main/:id" intExtra = "id") ... int id = getIntent().getInt("id", 0); 
 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { setUrlparams(url); if (url.indexOf("pattern") != -1) { // do something return false; } else { view.loadUrl(url); } return true; } }