Я использую логику из Android: переключение звука между Bluetooth и Громкоговоритель телефона несовместимы для переключения между динамиком, динамиком и Bluetooth. Вот код:
//For BT
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);
//For phone ear piece
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.stopBluetoothSco();
mAudioManager.setBluetoothScoOn(false);
mAudioManager.setSpeakerphoneOn(false);
//For phone speaker(loadspeaker)
mAudioManager.setMode(AudioManager.MODE_NORMAL);
mAudioManager.stopBluetoothSco();
mAudioManager.setBluetoothScoOn(false);
mAudioManager.setSpeakerphoneOn(true);
Эта логика работает должным образом, пока никакое другое приложение не использует звук (медиаплеер, телефон и т. д.). Если я запускаю свое приложение после запуска другого приложения, логика выходит из строя. Звук по-прежнему работает, за исключением того, что выходной сигнал не соответствует ожидаемому. Например, вместо громкой связи выход может идти на разговорный динамик.
Обратите внимание, что я запускаю свое приложение после выхода из другого приложения. Перекрытия нет.
Похоже, что настройки аудио-менеджера не относятся к конкретному приложению и могут испортить работу других приложений. Мне интересно, есть ли способ сбросить аудиоменеджер перед установкой моего режима. С уважением.