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

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

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 чтобы получить лучшую картину.