繁体   English   中英

Android不会为蓝牙一致地广播ACTION_AUDIO_STATE_CHANGED

[英]Android not broadcasting ACTION_AUDIO_STATE_CHANGED consistently for bluetooth

我想让我的Android VoIP应用程序与蓝牙耳机配合使用。

我根据Headset配置文件中的文档设置了所有内容(获取默认的蓝牙适配器,查询耳机配置文件代理并设置配置文件监听器)。 我还设置了BroadcastReceiver来监听蓝牙事件。 当我看到设备已连接( BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED以状态BluetoothHeadset.STATE_CONNECTED广播)时,我在新连接的设备上调用startVoiceRecognition()

后来,当我想设置调用时,我调用AudioManager bluetoothSCO函数:

if(shouldTurnBluetoothOn){
   am.setBluetoothScoOn(true);
   am.startBluetoothSco();
}else{
    am.stopBluetoothSco();
    am.setBluetoothScoOn(false);
}

我已经确保我的音频模块被初始化为与蓝牙SCO兼容:也就是说,我的AudioTrack用8KHz的AudioManager.STREAM_VOICE_CALL初始化, AudioRecord使用android.media.MediaRecorder.AudioSource.MIC和8KHz的采样。


现在,问题是这不能始终如一地运作。

根据startVoiceRecognition() Android文档:

用户可以收听ACTION_AUDIO_STATE_CHANGED。 如果此函数返回true,则将在EXTRA_STATE设置为STATE_AUDIO_CONNECTING的情况下广播此意图。

即使对startVoiceRecognition()的调用始终返回true,我也不会始终看到此广播。 当我看到广播时,蓝牙似乎工作。

这是怎么回事? 我在带有Lollipop的Nexus 5以及Android 4.4上的S3上运行我的应用程序。

在您的意图过滤中使用这些操作:

BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED
BluetoothDevice.ACTION_ACL_CONNECTED
BluetoothDevice.ACTION_ACL_DISCONNECTED 

并添加类别intentFilter.addCategory(BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY + "." + BluetoothAssignedNumbers.PLANTRONICS);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM