我正在努力让我的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上运行我的应用程序。
答案 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);