Подтвердить что ты не робот

Как воспроизводить звук через динамик, даже если гарнитура подключена?

Название вопроса может выглядеть повторным, но моя проблема - иногда проблема и вызывает сбои. Я использовал приведенный ниже код для воспроизведения через динамик, когда гарнитура подключена.

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. Несколько раз он ничего не играет.

Кажется, что звук системы звучит без ошибок при подключении гарнитуры. Например, настройка мелодии звонка правильно воспроизводит соответствующую мелодию звонка без каких-либо сбоев. Пожалуйста, помогите мне понять, как правильно воспроизвести звук через динамик с подключенной гарнитурой.

4b9b3361

Ответ 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