我有一个应用程序,我希望拿起蓝牙免提耳机上的按钮并执行我自己的功能。我认为这种耳机的行为可能与蓝牙音乐耳机不同。
无论如何,按下按钮似乎会产生一个;
android.intent.action.VOICE_COMMAND
不是;
android.intent.action.MEDIA_BUTTON
就像按下有线耳机上的按钮时一样。
这由系统提取,并开始内置的Google语音搜索。我不要这个当在我的应用程序中并按下时,我要处理并使用此操作。我不能!
如果我将其添加到清单中的应用程序中;
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.VOICE_COMMAND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
然后我的应用程序启动,但是您得到对话框来控制我不想要的默认VOICE_COMMAND。如果我删除了DEFAULT,则按下按钮会直接转到Google搜索,并且不会靠近我的应用程序。
如果将Intent过滤器添加到清单的Receivers部分,则不会收到任何广播接收器。因此我找不到捕获VOICE_COMMAND动作的方法。
拦截VOICE_COMMAND的正确/可行方法是什么,以便可以在活动运行时以自定义方式使用它,而无需默认使用系统语音搜索?
我一直很难找到答案,但是我找不到任何以自定义方式处理应用程序内VOICE_COMMAND操作的方法。我很高兴能在其他时间通过该按钮启动google搜索,但是当我使用我的应用程序时,我想在按按钮时执行[[only应用程序特定的操作。
看来要做的事似乎很合理,肯定有可能吗?AndroidManifest.xml
。我还指定了singleTop
以防止Activity多次启动(在我的情况下,它可以多次启动self):<activity
android:name="YourActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VOICE_COMMAND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
然后只需在YourActivity
onNewIntent
方法中处理此意图:
protected void onNewIntent(Intent intent) { if (intent != null && intent.getAction() != null && intent.getAction().equalsIgnoreCase("android.intent.action.VOICE_COMMAND")) { // write your logic here } }