Я пишу приложение, которое должно знать, будете ли вы звонить или принять вызов, будет ли аудио маршрутизироваться через устройство или подключенную гарнитуру Bluetooth.
Я могу определить, подключена ли гарнитура и может ли она потреблять и воспроизводить звук, следующим образом:
public static boolean isBluetoothHeadsetConnected(Context ctx) {
BluetoothAdapter mBluetoothAdapter =
BluetoothAdapter.getDefaultAdapter();
AudioManager am = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
boolean btin = false;
boolean btout = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (AudioDeviceInfo info: am.getDevices(AudioManager.GET_DEVICES_ALL)){
if ((info.getType()==AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)||(info.getType()==AudioDeviceInfo.TYPE_BLUETOOTH_SCO)){
if (info.isSink()){
btin = true;
} else {
btout = true;
}
}
}
} else {
btin = true;
btout = true;
}
return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
&& (mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED)
&& (btin&&btout);
}
Однако я обнаружил, что для некоторых устройств (в частности для Galaxy Watches) они будут возвращать «true» для этого (они имеют гарнитуру и могут маршрутизировать звук), НО, если вы делаете вызов или принимаете вызов, он НЕ будет маршрутизировать через них по умолчанию ,
AudioManager getRouting устарело, а isBluetoothScoOn () работает только при фактической потоковой передаче.
Можно ли узнать, куда будет поступать звук при поступлении / получении вызова?