Tout d'abord, ma question est extrêmement similaire à this , this and this . La documentation Android pour ce que j'essaie de réaliser est ici . Je n'ai pas pu faire fonctionner cela en utilisant ces ressources, alors s'il vous plaît ne marquez pas cela comme dupliqué) comme ce n'est pas le cas.
J'ai un site Web et une application Android. L'utilisateur sera en mesure de numériser des codes QR contenant des liens tels que http://mywebsite.com/map/ . Lorsque l'utilisateur essaie d'ouvrir ce lien, je veux Android pour lui montrer une boîte de dialogue de sélection où il peut choisir d'ouvrir ce lien en utilisant mon application. Si mon application n'est pas installée, elle devrait passer à la site Web spécifié.
Je sais Chrome permet cela en ouvrant la boîte de dialogue du sélecteur lorsque l'utilisateur accède à cette adresse. Par exemple, essayez de télécharger Stack Exchange app et d'aller à cette question dans Chrome Cela montrera ceci:
J'ai ajouté le code suivant dans AndroidManifest.xml après avoir suivi la suggestion dans les réponses ci-dessus:
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<action Android:name="Android.intent.action.SEND" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data
Android:Host="mywebsite.com"
Android:path="/map"
Android:scheme="http" />
<data
Android:Host="mywebsite.com"
Android:path="/animals"
Android:scheme="http" />
<data
Android:Host="mywebsite.com"
Android:path="/articles"
Android:scheme="http" />
</intent-filter>
En outre, j'ai essayé d'ajouter Android: mimeType = "text/plain" aux données, mais cela n'a pas aidé.
Le problème est que lorsque je vais sur http://mywebsite.com/map ou http://mywebsite.com/map/ = Chrome ouvre simplement la page Web sans afficher la boîte de dialogue du sélecteur.
Je voudrais mentionner:
Vous devez le configurer comme ceci:
<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:Host="example.com"
Android:pathPrefix="/someresource/"
Android:scheme="http" />
<data
Android:Host="www.example.com"
Android:pathPrefix="/someresource/"
Android:scheme="http" />
</intent-filter>
Notez que dans votre cas, vous devez utiliser Android: pathPrefix au lieu d'Android: path.
Juste pour être sûr, vous devez réinitialiser les préférences de votre application au cas où vous l'auriez accidentellement définie pour toujours ouvrir le lien dans chrome plutôt que d'afficher la boîte de dialogue du sélecteur. Une fois que "Toujours" est utilisé pour ouvrez l'URI correspondant, il ne montrera jamais le sélecteur.
Deuxièmement, vous pouvez avoir autant d'éléments de données dans le filtre d'intention que vous le souhaitez, mais il n'est pas nécessaire de répéter les informations. Vous pouvez faire la même chose comme ceci:
<data Android:Host="mywebsite.com"/>
<data Android:scheme="http"/>
<data Android:path="/map"/>
<data Android:path="/animals"/>
<data Android:path="/articles"/>
Mais notez que pour le chemin, vous pouvez simplement utiliser un caractère générique
<data Android:path="/.*"/>
Pensez à ajouter un autre
<data Android:Host="www.mywebsite.com"/>
Et enfin, vous ne voudrez peut-être pas afficher la boîte de dialogue du sélecteur, mais ouvrir directement une intention/activité d'application spécifique. Sur votre site Web, si vous détectez le Android, vous pouvez créer une URL de lien de cette façon:
<a href="intent://mywebsite.com/articles#Intent;package=com.myapp;scheme=http;end;"/>
Voir ici pour plus de détails Comment puis-je ouvrir une application à partir de mon navigateur Web (Chrome) dans Android? Que dois-je faire avec le lien A Href?
Notez qu'avec cette méthode, si l'application n'est pas installée, l'utilisateur sera redirigé vers le Google Play Store pour le package d'application spécifié.
Si vous rencontrez toujours des problèmes, vérifiez votre priorité de filtre d'intention. http://developer.Android.com/guide/topics/manifest/intent-filter-element.html
Dans mon cas, l'URL du site est: http://www.example.org/mobile/
donc mettre ce code dans AndroidManifest.xml à l'intérieur de l'activité
<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:Host="www.example.org"
Android:pathPrefix="/mobile/"
Android:scheme="http" />
</intent-filter>
Ici,
schéma -> Protocole d'un site particulier
Hôte -> URL du site exacte avec [~ # ~] www [~ # ~]
pathprefix -> Le sous-chemin de votre site si disponible
À présent,
Vous pouvez rechercher avec chrome/etc Android boîte de recherche du navigateur comme exemple puis ouvrez la boîte de dialogue choisie.) !!