蓝牙耳机上的VOICE_COMMAND拦截

问题描述 投票:4回答:1

我有一个应用程序,我希望拿起蓝牙免提耳机上的按钮并执行我自己的功能。我认为这种耳机的行为可能与蓝牙音乐耳机不同。

无论如何,按下按钮似乎会产生一个;

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应用程序特定的操作。

看来要做的事似乎很合理,肯定有可能吗?
android-intent android-manifest android-bluetooth android-search
1个回答
0
投票
如果我正确理解您的问题,则只需在“活动”中处理此操作。为此,只需将意图过滤器添加到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 } }

© www.soinside.com 2019 - 2024. All rights reserved.