Как воспроизводить звук через динамик, даже если гарнитура подключена?
заголовок вопроса может выглядеть повторным, но моя проблема иногда является проблемой и вызывает сбои. Я использовал приведенный ниже код для воспроизведения через динамик при подключении гарнитуры.
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. Несколько раз он ничего не играет.
Кажется, что системные звуки играют без ошибок, когда подключена гарнитура. Например-установка мелодии звонка воспроизводит соответствующую мелодию звонка правильно без каких-либо сбоев. Пожалуйста, помогите мне понять, как я могу правильно воспроизводить звук через динамик с подключенной гарнитурой.
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
после работы над ним немного (может быть, больше), я понял решение для него.
вместо изменения настроек AudioManager мы должны создать собственный экземпляр MediaPlayer и установить тип аудиопотока для этого экземпляра. Мы можем установить его в STREAM_RING для маршрутизации звука на гарнитуру и динамик.
player.reset();
player.setAudioStreamType(AudioManager.STREAM_RING);
try {
player.setDataSource(context, uri);
player.prepareAsync();}
затем вы можете прослушать onPreparedListener для запуска звука. Пожалуйста, проверьте блог аудио путем через динамик в Android чтобы получить лучшую картину.