如何将MyAndroidApp关联Google Assistant实现深度链接跳转指定内容
要实现你说的「在MyAndroidApp中打开xyz」这类语音指令跳转,主要分两大块:配置应用的Deep Link/Intent(让应用能接收外部跳转请求),以及在Google Actions Console中定义语音触发的Action(让Assistant理解指令并触发跳转)。下面一步步来:
第一步:配置应用的Deep Link(或显式Intent)
首先得确保你的应用已经支持Deep Link,这样Assistant才能通过链接直接打开指定内容。
1. 在AndroidManifest.xml中添加Intent Filter
找到你要跳转的目标Activity,添加如下intent-filter:
<activity android:name=".xyz.XyzDetailActivity"> <!-- 基础的Deep Link配置 --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 这里定义你的Deep Link Scheme,比如myapp://content/xyz --> <data android:scheme="myapp" android:host="content" android:pathPattern="/.*" /> </intent-filter> <!-- 如果要用显式Intent,也可以添加自定义Action --> <intent-filter> <action android:name="com.mycompany.myandroidapp.ACTION_OPEN_XYZ" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
这样,当外部(比如Assistant)发送符合这个scheme的链接,或者触发自定义Action的Intent时,你的Activity就能接收并处理。
2. 在Activity中处理跳转参数
在目标Activity的onCreate或onNewIntent方法里,获取传递过来的参数(比如xyz的具体内容ID):
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) handleIntent(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.let { handleIntent(it) } } private fun handleIntent(intent: Intent) { // 处理Deep Link的情况 intent.data?.let { uri -> val contentId = uri.lastPathSegment // 比如从myapp://content/123拿到123 // 根据contentId加载对应的xyz内容 loadContent(contentId) } // 处理自定义Action的情况 if (intent.action == "com.mycompany.myandroidapp.ACTION_OPEN_XYZ") { val contentId = intent.getStringExtra("CONTENT_ID") contentId?.let { loadContent(it) } } }
第二步:创建Google Action,关联到应用
接下来要让Google Assistant理解用户的语音指令,需要在Google Actions Console中创建对应的Action。
1. 登录Google Actions Console
登录Google Actions Console,选择「创建项目」,关联你的Google账号,项目名称可以和应用一致。
2. 选择「App Actions」类型
因为我们要直接跳转已有的Android应用,所以选择「App Actions」(这是专门用于关联Android应用的Action类型)。
3. 关联你的Android应用
在App Actions配置页面,点击「关联应用」,输入你的应用的包名(比如com.mycompany.myandroidapp),确保这个应用已经在Google Play Console中存在(哪怕是测试版也可以)。
4. 定义触发短语和参数
接下来要定义用户的语音指令,比如「在MyAndroidApp中打开{contentName}」或者「在MyAndroidApp中显示{contentId}」。
- 首先创建一个Invocation,设置应用的名称(比如「MyAndroidApp」),这样Assistant能识别用户提到的应用名。
- 然后创建一个Action,选择「Deep Link」或者「Intent」作为触发方式:
- 如果用Deep Link:填写你的Deep Link模板,比如
myapp://content/{contentId},然后定义参数contentId,设置参数的类型(比如「文本」或者「数字」),并添加对应的训练短语,比如:- "打开MyAndroidApp里的{contentId}"
- "在MyAndroidApp中显示{contentId}"
- 如果用显式Intent:选择你的应用包名和自定义Action(
com.mycompany.myandroidapp.ACTION_OPEN_XYZ),然后添加参数CONTENT_ID,同样设置参数类型和训练短语。
- 如果用Deep Link:填写你的Deep Link模板,比如
5. 测试Action
配置完成后,点击「测试」,使用Google Assistant在你的测试设备上(需要登录同一个Google账号,并且安装了你的应用)说出测试短语,比如「在MyAndroidApp中打开xyz123」,看是否能跳转到应用内对应的内容。
第三步:发布(可选,用于正式环境)
如果测试没问题,就可以提交你的App Actions进行审核,审核通过后,所有安装了你的应用的用户都能使用这些语音指令。
注意事项
- 确保你的Deep Link在应用内能正常工作,先通过adb命令测试:
adb shell am start -a android.intent.action.VIEW -d "myapp://content/xyz123" com.mycompany.myandroidapp - 训练短语要尽量覆盖用户可能的表达方式,比如「打开MyAndroidApp的xyz」「用MyAndroidApp看xyz」等,这样Assistant的识别准确率更高。
- 如果你的内容有特定的分类(比如电影、文章),可以使用Google预定义的参数类型(比如「Movie」「Article」),提升识别效果。
内容的提问来源于stack exchange,提问作者Preetham Ivan D'Souza

