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

时间:2015-03-12 22:45:18

标签: android 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初始化为AudioManager.STREAM_VOICE_CALL,频率为8KHz,AudioRecord使用{ {1}}和8KHz的样本。


现在,问题是这不能持续发挥作用。

根据android.media.MediaRecorder.AudioSource.MIC的Android文档:

  

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

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

这笔交易是什么?我在带有Lollipop的Nexus 5以及Android 4.4上的S3上运行我的应用程序。

1 个答案:

答案 0 :(得分:0)

在意图档中使用以下操作:

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);