如何让Android Things 1.0的Google Assistant带不同参数调用我的应用
嘿,我来帮你搞定用Google Assistant触发带参数Intent调用自定义Activity的需求!刚好我对Android Things 1.0和Assistant的整合流程很熟悉,给你一步步拆解:
第一步:先把项目升级到Android Things 1.0并配置基础权限
首先你得把现有Android Things 0.6的项目升级到1.0版本——毕竟0.6本身不支持Google Assistant,这是前提。升级后,在AndroidManifest.xml里做这几件事:
- 添加Assistant所需的权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> - 给你的目标Activity配置能接收Assistant Intent的属性,比如指定一个自定义的action(比如
com.yourpackage.ASSISTANT_COMMAND),并设置exported="true"让外部能调用:<activity android:name=".YourControlActivity" android:exported="true"> <intent-filter> <action android:name="com.yourpackage.ASSISTANT_COMMAND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
第二步:定义Assistant能识别的语音指令与Intent映射
你需要创建一个actions.xml文件放在res/xml/目录下,用来告诉Google Assistant哪些语音指令对应触发你的自定义Intent,还能传递参数。举个例子,假设你想实现“让我的应用播放音乐”和“让我的应用关闭灯光”这类指令:
<?xml version="1.0" encoding="utf-8"?> <actions> <action intentName="com.yourpackage.ASSISTANT_COMMAND"> <fulfillment url="android://com.yourpackage/.YourControlActivity" /> <parameter name="action_type"> <entity-set-reference entitySetId="action_types" /> </parameter> </action> <entity-set entitySetId="action_types"> <entity value="play_music"> <synonym>播放音乐</synonym> <synonym>启动音乐</synonym> </entity> <entity value="turn_off_light"> <synonym>关闭灯光</synonym> <synonym>关掉灯</synonym> </entity> </entity-set> </actions>
这里的action_type就是传递给Intent的参数,不同的语音同义词对应不同的参数值。
第三步:在Activity中处理带参数的Intent
接下来在你的YourControlActivity里,接收并解析Intent的参数,根据参数执行不同行为。可以在onCreate()或者onNewIntent()里处理(如果Activity是单实例模式,用onNewIntent更合适):
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handleAssistantCommand(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); handleAssistantCommand(intent); } private void handleAssistantCommand(Intent intent) { if ("com.yourpackage.ASSISTANT_COMMAND".equals(intent.getAction())) { String actionType = intent.getStringExtra("action_type"); if (actionType == null) return; // 根据参数执行不同逻辑 switch (actionType) { case "play_music": // 执行播放音乐的代码 startMusicPlayback(); break; case "turn_off_light": // 执行关闭灯光的代码 turnOffLight(); break; default: // 处理未知指令 showUnknownCommandToast(); break; } } }
第四步:在树莓派上测试验证
最后把应用部署到树莓派3上,然后:
- 确保设备已经关联到你的Google账号,并且在Android Things设置里启用了Google Assistant
- 对着设备说出你定义的语音指令,比如“OK Google,让我的应用播放音乐”
- 检查你的Activity是否被唤起,并且对应逻辑是否正确执行
注意:如果遇到Assistant不识别指令的情况,可以在设备上重新同步Assistant的设置,或者检查actions.xml里的指令拼写是否准确。
内容的提问来源于stack exchange,提问作者Marc Alcantara
相关产品推荐
相关产品推荐

