我希望在长按蓝牙按钮时启动我的主要活动,就像长按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语音。
答案 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
所以没有广播语音识别的意图。