所以,我有一个需要使用扬声器和麦克风的应用程序。它必须使用和不使用蓝牙。基本上,当连接蓝牙耳机或汽车的免提系统时,我希望应用程序通过蓝牙使用扬声器和麦克风(这是棘手的部分),而不是 - 手机的扬声器和麦克风。
最初我希望摆脱平台的经理,但是...它适用于扬声器,但不适用于麦克风。即使扬声器切换到蓝牙,它仍然继续使用手机的麦克风。
我添加了对startBluetoothSco() and setBluetoothScoOn()
的呼叫并且它变得更好了 - 现在它实际上适用于耳机,但是...不是汽车的免提系统。虽然使用耳机但它确实使用蓝牙麦克风,但它不适用于汽车的免提系统。
我怀疑(但我甚至不知道如何检查)这与汽车呈现为两个蓝牙设备 - 媒体播放器和耳机这一事实有关。
任何智慧的话语?我完全迷失在这里...... 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();
}
}