Disons que je veux définir qu'un URI tel que:
myapp://path/to/what/i/want?d=This%20is%20a%20test
doit être géré par ma propre application ou service. Notez que le schéma est "myapp"
et non "http"
, ou "ftp"
. C'est précisément ce que j'ai l'intention: définir mon propre schéma URI globalement pour le système d'exploitation Android. Est-ce possible?
C'est quelque peu analogue à ce que certains programmes font déjà sur, par exemple, les systèmes Windows, tels que Skype ( skype://
) ou tout autre programme de téléchargement de torrent ( torrent://
).
Réponses:
C'est très possible; vous définissez le schéma d'URI dans votre AndroidManifest.xml, à l'aide de l'
<data>
élément. Vous configurez un filtre d'intention avec l'<data>
élément rempli et vous pourrez créer votre propre schéma. ( Plus d'informations sur les filtres d'intention et la résolution d'intention ici .)Voici un petit exemple:
Selon le fonctionnement des intentions implicites, vous devez également définir au moins une action et une catégorie; ici, j'ai choisi VIEW comme action (bien que cela puisse être n'importe quoi), et je me suis assuré d'ajouter la catégorie DEFAULT (car cela est requis pour toutes les intentions implicites). Notez également comment j'ai ajouté la catégorie NAVIGABLE - ce n'est pas nécessaire, mais cela permettra à vos URI d'être ouverts à partir du navigateur (une fonctionnalité intéressante).
la source
En complément de la réponse @DanielLew , pour obtenir les valeurs des paramètres, vous devez faire ceci:
Exemple d'URI:
myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
dans votre activité:
la source
http://www.host.com/directory/value
? Comment pouvons-nous obtenir celavalue
?uri.getLastPathSegment();
Je vous recommande fortement de ne pas définir votre propre schéma. Cela va à l'encontre des normes Web pour les schémas d'URI, qui tentent de contrôler rigoureusement ces noms pour une bonne raison - pour éviter les conflits de noms entre différentes entités. Une fois que vous avez mis un lien vers votre schéma sur un site Web, vous avez mis ce petit nom dans tout l'espace de noms d'Internet et vous devriez suivre ces normes.
Si vous voulez juste pouvoir avoir un lien vers votre propre application, je vous recommande de suivre l'approche que j'ai décrite ici:
Comment enregistrer un espace de noms d'URL (myapp: //app.start/) pour accéder à votre programme en appelant une URL dans le navigateur sous Android OS?
la source
Une autre approche alternative à celle de Diego consiste à utiliser une bibliothèque:
https://github.com/airbnb/DeepLinkDispatch
Vous pouvez facilement déclarer les URI que vous souhaitez gérer et les paramètres que vous souhaitez extraire via des annotations sur l'activité, comme:
De plus, les paramètres de requête seront également transmis à l'activité.
la source
Comme la question est posée il y a des années, Android a beaucoup évolué sur ce schéma d'URI.
Du schéma d'URI d'origine, au lien profond, et maintenant aux liens d'applications Android.
Android recommande désormais d'utiliser des URL HTTP, et non de définir votre propre schéma d'URI. Étant donné que les liens d'application Android utilisent des URL HTTP qui renvoient à un domaine de site Web que vous possédez, aucune autre application ne peut utiliser vos liens. Vous pouvez vérifier la comparaison des liens profonds et des liens d'applications Android à partir d' ici
Vous pouvez maintenant facilement ajouter un schéma d'URI en utilisant l'option Android Studio: Outils> Assistant de liens d'application. Veuillez vous référer au document Android: https://developer.android.com/studio/write/app-link-indexing.html
la source