上一篇博文承诺要写一篇谷歌语音发起闹钟设置的博文,最近这个功能实现得差不多了。趁着今天有点时间,把他总结一下。国内由于一些众所周知的原因,谷歌服务一致不能再国内使用,颇有遗憾。加上国内手机厂商对谷歌原生系统做了大规模定制,谷歌语音被剔除,使用自家优化过,更符合国人使用的语音。前阵子老师要求在谷歌语音中加入APP的设置计时器和闹钟的操作,查了好久也没有查到,本以为是自己的查找方向有问题,后来发现,国内很少有类似谷歌语音(Google Voice Action)的博客,后来只能翻看官方文档。下面讲讲我的学习历程。
- 首先搜索android的Google Voice Action的官方文档,不难找到关于Google语音发起操作的Action。其实谷歌语音跟APP交互就类似与Activity之间的跳转。谷歌语音会向某些就有该功能过滤器的APP的指定Activity发起Intent(意图),会传过来一个Action,表示是什么操作,比如是设置闹钟的Intent,Action就是android.intent.action.SET_TIMER,不同的语音操作对应不同的Action。
谷歌语音的官方文档
下面以设置闹钟为例讲解一下。 - 要支持语音设置闹钟,首先要给你的APP一些权限
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
其次是在你接收谷歌语音的Intent的Activity页面中设置过滤器
注意:只能是Activity,服务和广播都不行(测试过)
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SET_ALARM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
有个问题:如果使用普通的Activity,会出现从谷歌语音界面跳转到指定页面,再跳转回来,这样体验特别差,所以需要把指定Activity改成无界面Activity。无界面Activity如何实现呢?我的上一篇博文有提到:无界面Activity或者APP的实现,参看这个即可。
- 最后贴出代码
import android.app.Activi