在Android中捕获蓝牙耳机长按事件

时间:2013-12-16 06:49:04

标签: android bluetooth

我希望在长按蓝牙按钮时启动我的主要活动,就像长按BT按钮时谷歌语音的启动方式,但我似乎无法找到触发它的正确动作。

我目前的代码:

public class LaunchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.d("HERE", action);
    }
}

在清单中:

    <receiver
        android:name="com.app.LaunchReceiver"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED" />
            <action android:name="android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT" />
            <action android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" />
            <action android:name="android.intent.action.VOICE_COMMAND" />
            <action android:name="android.intent.action.WEB_SEARCH" />
            <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
    </receiver>

现在,使用上面的代码,显示的唯一操作是CONNECTION_STATE_CHANGED,但是当您打开/关闭耳机时也会发生这种情况。我一直在尝试stackoverflow中的其他答案,但没有成功。

---编辑---解决方法是:

    <activity
        android:name="com.app.LaunchActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:priority="2147483647">
            <action android:name="android.intent.action.VOICE_COMMAND" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

并在应用程序管理器中禁用S语音。

1 个答案:

答案 0 :(得分:3)

根据我在android中的bluedroid和bluetooth app(packages / apps / bluetooth)的理解

每当按下耳机中的蓝牙按钮时,它会发送AT + BVRA命令(检查蓝牙hfp规格1.5 / 1.6),此命令要求手机启动语音识别

bluedroid源代码 btif / src / btif_hf.c-&gt; BTA_AG_AT_BVRA_EVT调用BTHF_VR_STATE_STARTED

被翻译为

/包/应用/蓝牙/ + /机器人-4.4.2_r1 / SRC / COM /机器人/蓝牙/ HFP / HeadsetStateMachine.java

processVrEvent-&GT; startActivity(sVoiceCommandIntent); 其中sVoiceCommandIntent是ACTION_VOICE_COMMAND

所以没有广播语音识别的意图。