【问题标题】:Intercept VOICE_COMMAND on Bluetooth Headset拦截蓝牙耳机上的 VOICE_COMMAND
【发布时间】:2015-11-29 12:22:00
【问题描述】:

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

反正按下按钮好像会生成一个;

android.intent.action.VOICE_COMMAND

不是;

android.intent.action.MEDIA_BUTTON

就像按下有线耳机上的按钮一样。

这被系统拾取并启动内置的谷歌语音搜索。我不想要这个。在我的应用程序中并按下时,我想处理并使用此操作。我不能!

如果我将此添加到清单中的应用程序;

<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 搜索,但是当我的应用程序被使用时,我只想在按下按钮时执行特定于应用程序的操作

这似乎是一件合理的事情,肯定是可能的吗?

【问题讨论】:

    标签: android-intent android-manifest android-bluetooth android-search


    【解决方案1】:

    如果我理解您的问题,您只需要在您的活动中处理此操作。为此,只需将意图过滤器添加到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
        }
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多