Adbでコマンドを入力すると:
./adb Shell am start -W -a Android.intent.action.VIEW -d "example:gizmos" com.myapp
私はこのエラーを受け取ります:
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 }
しかし、adbでコマンドを入力すると:
./adb Shell am start -W -a Android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity
すべてが正常に動作し、メッセージが表示され、電話でアクティビティの起動を確認できます。
Starting: Intent { act=Android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete
私の質問は、パッケージ名だけでなく、アクティビティの完全なパスを取得する必要があるのはなぜですか?外部のアプリやブラウザがディープリンクを試行するときに、アプリ内のアクティビティを呼び出さないためです。
これは私の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>
アクティビティへのフルパスを指定する必要はありませんが、URIに適切に反応するかどうかをテストする場合inアプリパッケージを指定するだけです:
adb Shell am start -a Android.intent.action.VIEW -d "example://gizmos" com.myapp
また、指定したコマンドにバグがあります-example://gizmos
not example:gizmos
Android studioの最適なソリューションはここで説明されています: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-Android-- cms-26317
TLDR:Android Studio-> Run-> Edit Configurations
[起動オプション]の[起動]を[URL]に変更し、テキストフィールドのURLに正しいURL「something://」を入力します。
他の回答で述べたように、「example:gizmos」ではなく「example:// gizmos」である必要があります
または、adbを使用する代わりに、Androidでディープリンクテスターアプリを使用して直接ディープリンクをテストできます。
https://play.google.com/store/apps/details?id=com.manoj.dlt
パッケージ名やコンポーネント名について言及する必要はありません。ディープリンクを入力して起動するだけです。
私はadbを介したディープリンクのテストが面倒で困難な場合があることを発見しました。したがって、私はそれを行うためにこの小さなアプリを構築しました。
間違ったパッケージ名を使用しようとしているため、コマンドが正しくありません。com.myapp.activity.DeepLinkActivity
の代わりに、application Idがcom.companyname
の場合、コマンドは次のようになります。
adb Shell am start -W -a Android.intent.action.VIEW -d "example://gizmos" com.companyname
MIMEタイプが指定されているインテントフィルターにadb Shell am start ...
またはfile:///...
URIがある場合、他の誰かが私が抱えている問題、つまりcontent://...
が機能しないという場合に備えて、例
<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>
-tパラメーターを使用して、コマンドラインでMIMEタイプを指定する必要があります。
adb Shell am start -W -a Android.intent.action.VIEW -d "file:///sdcard/myfolder/myfile.txt" -t "text/plain" com.myapp
または、OPと同じエラーメッセージが表示されます。
経験に基づいて、 this 利用可能なadbコマンドのリストを使用することをお勧めしました。これは、Android 8。