所以,我有一个需要使用扬声器和麦克风的应用程序 . 它必须使用和不使用蓝牙 . 基本上,当连接蓝牙耳机或汽车的免提系统时,我希望应用程序通过蓝牙使用扬声器和麦克风(这是棘手的部分),而不是 - 手机的扬声器和麦克风 .
最初我希望离开平台的经理,但是...它适用于扬声器,但不适用于麦克风 . 即使扬声器切换到蓝牙,它仍然继续使用手机的麦克风 .
我添加了对 startBluetoothSco() and setBluetoothScoOn()
的调用并且它变得更好 - 现在它实际上适用于耳机,但是...不是与汽车_2959438的免提系统 .
我怀疑(但我甚至不知道如何检查)这与汽车呈现为两个蓝牙设备 - 媒体播放器和耳机这一事实有关 .
任何智慧的话?我完全迷失在这里... Android的AudioManager蓝牙控制API总是一团糟......
更新 - 这是我正在使用的代码:
private static boolean isBluetoothHeadsetConnected() {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
&& mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
}
private boolean checkBlueTooth() {
if (!isBluetoothHeadsetConnected()) {
return false;
}
return true;
}
private void useBluetooth() {
AudioManager audioManager;
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkBlueTooth()) {
start();
} else {
BroadcastReceiver scoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1) ==
AudioManager.SCO_AUDIO_STATE_CONNECTED) {
start();
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
this.registerReceiver(scoReceiver, intentFilter);
useBluetooth();
}
}