J'aimerais pouvoir demander à mon application d'ouvrir un lien lorsque l'utilisateur clique sur l'URL d'un modèle donné au lieu de permettre au navigateur de l'ouvrir. Cela peut être 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 fraîchement créée.
Par exemple, cliquez sur un lien YouTube depuis 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 un Android.intent.action.VIEW de la catégorie Android.intent.category.BROWSABLE .
De Romain Guy Photostream 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>
Une fois à l'intérieur, vous êtes dans activité , vous devez rechercher l'action, puis faire quelque chose avec l'URL qui vous a été remise. 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 de noter, cependant, que cette application est un peu obsolète (1.2), vous pouvez donc trouver qu'il existe de meilleures façons d'y parvenir.
Certaines bibliothèques analysent automatiquement les paramètres de l'URL.
tel que
https://github.com/airbnb/DeepLinkDispatch
&&
https://github.com/mzule/ActivityRouter
Le dernier est écrit par moi. Qui peut analyser les paramètres du 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;
}
}