Как воспроизводить звук через динамик, даже если гарнитура подключена?
Название вопроса может выглядеть повторным, но моя проблема - иногда проблема и вызывает сбои. Я использовал приведенный ниже код для воспроизведения через динамик, когда гарнитура подключена.
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);
if(! Globals.mediaPlayer.isPlaying()){
Globals.mediaPlayer.start();
}
Приведенный выше код воспроизводит аудио следующим образом:
1. Очень немногие, он отлично играет.
2. В большинстве случаев он играет с зацикленным звуком в фоновом режиме.
3. Несколько раз он ничего не играет.
Кажется, что звук системы звучит без ошибок при подключении гарнитуры. Например, настройка мелодии звонка правильно воспроизводит соответствующую мелодию звонка без каких-либо сбоев. Пожалуйста, помогите мне понять, как правильно воспроизвести звук через динамик с подключенной гарнитурой.
Ответы
Ответ 1
После того, как я немного поработал над этим (возможно, более того), я понял, для чего это решение.
Вместо изменения настроек AudioManager мы должны создать собственный экземпляр MediaPlayer и установить для этого экземпляра тип аудиопотока. Мы можем установить его в STREAM_RING для маршрутизации звука на гарнитуру и динамик.
player.reset();
player.setAudioStreamType(AudioManager.STREAM_RING);
try {
player.setDataSource(context, uri);
player.prepareAsync();}
Затем вы можете прослушивать onPreparedListener для запуска аудио. Пожалуйста, просмотрите блог Проложить аудио через динамик в Android, чтобы получить лучшее изображение.
Ответ 2
У меня была аналогичная проблема, которую я решил, создав новый медиаплеер, если он не играл и установил тип потока медиаплеера в тот же режим аудио-менеджера, попробуйте что-то вроде этого:
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);
if(! Globals.mediaPlayer.isPlaying()){
MediaPlayer mp = MediaPlayer.create(....);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.start();
}
В моем случае я использовал AudioManager.MODE_IN_COMMUNICATION.
Также не забудьте установить разрешение
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
в AndroidManifest.xml