Lorsque je tape la commande dans adb:
./adb Shell am start -W -a Android.intent.action.VIEW -d "example:gizmos" com.myapp
Je reçois cette erreur:
Starting: Intent { act=Android.intent.action.VIEW dat=example://gizmos pkg=com.myapp }
Error: Activity not started, unable to resolve Intent { act=Android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp }
Mais quand je tape la commande dans adb:
./adb Shell am start -W -a Android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity
Tout fonctionne bien et je reçois le message et je peux voir le lancement de l'activité sur le téléphone:
Starting: Intent { act=Android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete
Ma question est pourquoi dois-je obtenir le chemin complet de mon activité et pas seulement le nom du package? Parce que lorsque les applications externes ou le navigateur tenteront de créer un lien profond, ils n'invoqueront pas l'activité dans mon application.
Ceci est mon AndroidManifest.xml
<activity
Android:name=".activity.DeepLinkActivity">
<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="example"
Android:Host="gizmos" />
</intent-filter>
</activity>
Vous n'avez pas besoin de spécifier le chemin d'accès complet à votre activité, mais si vous voulez tester si vous réagissez correctement à l'URI in votre application spécifiez simplement le package d'application:
adb Shell am start -a Android.intent.action.VIEW -d "example://gizmos" com.myapp
Il y a aussi un bug dans la commande que vous avez fournie - il devrait y avoir example://gizmos
ne pas example:gizmos
La meilleure solution pour Android studio est expliquée ici: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-Android-- cms-26317
TLDR: Android Studio -> Exécuter -> Modifier les configurations
Changez Launch dans Launch Options en "URL" et entrez dans le champ de texte URL l'url correcte: "quelque chose: //"
Comme l'autre réponse l'a mentionné, ce devrait être "exemple: // gizmos" et non "exemple: gizmos"
Alternativement, au lieu d'utiliser adb, vous pouvez tester des liens profonds directement sur Android en utilisant l'application de test de liens profonds:
https://play.google.com/store/apps/details?id=com.manoj.dlt
Pas besoin de mentionner de nom de package ou de composant. Tapez simplement le lien profond et le feu.
J'ai trouvé que tester des liens profonds via adb était parfois lourd et difficile. Par conséquent, j'ai construit cette petite application pour le faire.
Votre commande est incorrecte car vous essayez avec un nom de package incorrect, au lieu de com.myapp.activity.DeepLinkActivity
vous ne devez écrire que le nom du package spécifié dans le gradle de construction (Module: app) par 'application Id', par exemple si votre applicationId est com.companyname
, alors votre commande serait comme ceci:
adb Shell am start -W -a Android.intent.action.VIEW -d "example://gizmos" com.companyname
Juste au cas où quelqu'un d'autre aurait le problème que j'avais, à savoir que adb Shell am start ...
ne fonctionne pas, si vous avez un file:///...
ou content://...
URI dans votre filtre d'intention avec un type MIME spécifié, par exemple
<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="content" />
<data Android:scheme="file" />
<data Android:mimeType="text/plain" />
<data Android:Host="*" />
</intent-filter>
Vous devez spécifier le type MIME sur la ligne de commande en utilisant le paramètre -t:
adb Shell am start -W -a Android.intent.action.VIEW -d "file:///sdcard/myfolder/myfile.txt" -t "text/plain" com.myapp
ou bien vous obtenez le même message d'erreur que l'OP.
Sur la base de l'expérience que je viens de vivre, je recommande d'utiliser this liste des commandes adb disponibles. Il semble être plus récent que les textes d'aide du shell de mon appareil de test exécutant Android 8.