我遵循了https://developer.android.com/training/app-indexing/deep-linking.html上的insttructions,但当我想通过adb
触发意图时:
adb shell am start
-W -a android.intent.action.BROWSEABLE
-d "http://example.com/gizmos" com.myapp.android
我只是得到
错误:activity未启动,无法解析意图{act=android.Intent.action.view dat=example:/gizmos flg=0x10000000 pkg=com.myapp.android}
<activity
android:name=".activities.DeepLinkActivity"
android:label="@string/title_activity_deep_link">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<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="http"
android:host="example.com"
android:pathPrefix="/gizmos" />
</intent-filter>
</activity>
我犯了什么明显的错误吗?
编辑:
Ok首先确保您的软件包可由ADB访问:
adb shell am start -n com.example.simon.test/.activities.MainActivity
然后,为了接受多个数据标记,您需要不同的意图过滤器(这是我的工作方式,不同于我在网上看到的所有其他示例)。例如:
<intent-filter>
...
<data android:scheme="http"
android:host="example.com"/>
</intent-filter>
<intent-filter>
...
<data android:scheme="http"
android:host="example.com"
android:pathPrefix="/gizmos"/>
</intent-filter>
注意,在上面的示例中,pathPrefix以正斜杠开头!
我不知道为什么谷歌的文档会如此误导人,或者可能是针对不同版本的adb,但上面的更改对我来说是完美的。这有所帮助:来源
这就是我如何让Chrome浏览器将特定链接路由到我的应用程序:
<activity
android:name=".activities.DeepLinkActivity"
android:label="@string/app_name">
<!-- Accept chrome links -->
<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="http"
android:host="example.com"
android:pathPrefix="/"/>
</intent-filter>
<!-- Accept adb data flag -->
<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="http"
android:host="example.com"/>
</intent-filter>
</activity>
注意,第一个过滤器在Google Chrome上工作,而第二个过滤器在ADB上工作。
注意2如果链接被输入到浏览器的地址栏中,应用程序选择菜单将不会显示。必须是某个页面的链接。
在我看来,这里的一切都相当模糊,真的不是我所期望的那样。但在我的设备上就是这样工作的。希望这对你也有帮助。