web-dev-qa-db-fra.com

Lancement de l'application Android Android depuis Android / Chrome

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:

Screenshot of chooser dialog.

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:

  • en suivant la documentation Android, j'ai ajouté ce code dans l'une des structures d'activité d'AndroidManifest.xml. Comme je ne suis pas sûr que ce soit l'endroit idéal pour l'ajouter, j'ai également essayé de l'ajouter en dehors de la structure d'application et directement à l'intérieur de la structure d'application, mais cela n'a pas fonctionné
  • c'est le seul code que j'ai implémenté pour que cela fonctionne. Si quelque chose d'autre est nécessaire, faites-le moi savoir. D'après ce que je comprends, l'ajout d'un href à la page Web n'est nécessaire que lors de l'utilisation de schémas personnalisés
  • Je ne veux pas utiliser de schéma personnalisé pour y parvenir
  • Je développe sur un Nexus 4, exécutant Android 4.4.2 (dernière)
28
Vlad Schnakovszki

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.

61
AndroidGecko

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

6
Eric Woodruff

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.) !!

3
Dhruv Raval