2015-03-02 14 views
12

Quando digito il comando in adb:Sto cercando di testare Android gli URL dei link diretti attraverso adb per lanciare la mia app

./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp 

ottengo questo errore:

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 } 

Ma quando si digita il comando adb:

./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity 

Tutto funziona bene e ottengo il messaggio e posso vedere il lancio di attività sul telefono:

Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity } 
Status: timeout 
Activity: com.myapp.activity.DrawerActivity 
Complete 

La mia domanda è: perché devo seguire il percorso completo della mia attività e non solo il nome del pacchetto? Perché quando le app esterne o il browser proveranno a collegarsi in profondità non invocheranno l'attività nella mia app.

Questo è il mio 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> 

risposta

26

Non è necessario specificare il percorso completo per la vostra attività, ma se si vuole verificare se si reagisce correttamente URI in vostra applicazione basta specificare app pacchetto:

adb shell am start -a android.intent.action.VIEW -d "example://gizmos" com.myapp 

Inoltre v'è bug nel comando che hai fornito - ci dovrebbe essere example://gizmos non example:gizmos

2

Come l'altra risposta accennato, dovrebbe essere "Esempio: // aggeggi" e non "Esempio: aggeggi"

In alternativa, invece di usare adb, è possibile verificare i collegamenti profondi direttamente su Android utilizzando profondo legame tester app:

https://play.google.com/store/apps/details?id=com.manoj.dlt

Non c'è bisogno di parlare di qualsiasi nome del pacchetto o nome del componente. Basta digitare il collegamento profondo e sparare.

Ho trovato che testare i collegamenti profondi tramite adb è a volte laborioso e difficile. Quindi, ho creato questa piccola app per farlo.

1

vostro comando non è corretto perché si sta tentando con un nome di pacchetto errato, Invece di com.myapp.activity.DeepLinkActivity dovete scrivere solo il nome del pacchetto specificato nella build Gradle (Modulo: app) da 'applicazione Id' ad esempio, se il vostro ApplicationID è com.companyname, allora il vostro comando sarà simile a questo:

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.companyname