Как программно переключить аудиовыход в Android 13?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как программно переключить аудиовыход в Android 13?

Сообщение Anonymous »

Я пытаюсь написать простое приложение для Android, которое способно переключать текущее выбранное устройство вывода звука в масштабе всей системы (аналогично тому, как вы можете это сделать в виджете панели задач в Windows).
согласно документации, метод setCommunicationDevice должен заменить устаревший метод setSpeakerphoneOn из API 34 и выше. однако, что бы я ни пытался, я не могу программно переключить вывод звука (музыки) на другие устройства. также отмечается, что setCommunicationDevice

следует использовать для случаев использования связи, например голосовых или видеозвонков.

Итак, стоит ли мне переключать аудиовыход для музыки? Я занимаюсь этим уже несколько дней, а в документах не хватает информации, я чувствую себя тупым.
также нашел этот вопрос, который тоже задает тот же вопрос, но нет ответов (и пример там есть тоже не работает).
Итак, моя текущая цель: предполагая, что музыка воспроизводится с подключенного устройства Bluetooth, изменить вывод на локальный встроенный динамик, когда пользователь нажимает кнопку.

Код: Выделить всё

Button(
onClick = {
// failed attempts
}
) {
Text("Set Phone speaker")
}

сбой 1 — setCommunicationDevice

Код: Выделить всё

val speakerDevice =
audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
.find { it.type == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER }
if (speakerDevice != null) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
val result = audioManager.setCommunicationDevice(speakerDevice)
if (!result) {
// result=true is true but the switch never occurs
}
}
}
ошибка 2 — setRouting

Код: Выделить всё

audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_SPEAKER, AudioManager.ROUTE_ALL);
также никогда не работает.
fail 3 — setSpeakerphoneOn
взято отсюда:

Код: Выделить всё

audioManager.mode = AudioManager.MODE_NORMAL;
audioManager.stopBluetoothSco();
audioManager.setBluetoothScoOn(false);
audioManager.setSpeakerphoneOn(true);
опять не работает.
Снова пробую телефон Google Pixel 7 с Android 13.
Итак, как я могу переключить устройство вывода звука в масштабе всей системы на любой (обычный) аудиовыход с устройства?


Подробнее здесь: https://stackoverflow.com/questions/772 ... android-13
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»