Громкость динамика (будильник) уменьшается при подключении наушников

Я пытаюсь воспроизвести звук будильника через динамики через канал будильника на максимальной громкости. Для этого я использую AudioManager и MediaPlayer. Если я подключаю наушники, будильник по-прежнему воспроизводится через динамики, однако громкость будильника, воспроизводимого через динамики, резко уменьшается, что делает его бесполезным для моей цели.

Есть ли способ предотвратить это уменьшение объема?

Код, который я использую, таков:

public void startAlarmSound() {
    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(false);

    audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);

    if (!alreadyPlaying)
        playAlarmSound();

    alreadyPlaying = true;
}

private void playAlarmSound() {
    mediaPlayer = new MediaPlayer();

    mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mediaPlayer.start();
        }
    });
    try {
        mediaPlayer.setDataSource(this, Uri.parse("android.resource://com.mystuff.mine/" + R.raw.alarm_sound));
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);

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

Изменить:

Эта проблема возникает как с моим приложением, так и с системными приложениями (такими как будильник), а также с Nexus 5 и 6. Поскольку я также читал отчеты об этой проблеме от других производителей телефонов, поэтому я не думаю, что Проблема исключительно для линейки телефонов Nexus. Мне нужно обходное решение.

Я только что проверил результат как getStreamMaxVolume(AudioManager.STREAM_ALARM), так и getStreamVolume(AudioManager.STREAM_ALARM). Оба отображают 7, независимо от того, подключены наушники или нет.

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


person Syzygy    schedule 30.03.2017    source источник
comment
Попробуйте посмотреть здесь android.googlesource.com/platform/packages/apps/DeskClock/+/   -  person John    schedule 06.04.2017
comment
Какую конкретную часть вы имеете в виду? Единственное, что может помочь, это mediaPlayer.setVolume(1,1). Я пробовал это, но это не решило проблему.   -  person Syzygy    schedule 06.04.2017
comment
Проблема в том, что нельзя увеличить громкость только динамика. Но в любом случае попробуйте audioManager.requestAudioFocus(null, AudioManager.STREAM_ALARM, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);   -  person John    schedule 06.04.2017
comment
Это не проблема, если громкость в наушниках также увеличится, но в этом случае законодательство ЕС может создать проблему. Я проверю requestAudioFocus позже сегодня, но я вполне уверен, что это среди вещей, которые я уже пробовал - по крайней мере, из документации кажется, что это не поможет (хотя проблема очень похожа на описанное там приглушение громкости. )   -  person Syzygy    schedule 07.04.2017
comment
Это встроенная функция устройств, вы не можете установить такую ​​высокую громкость, пока пользователь не разрешит это сам, так как это может повредить уши, и проблема в том, что громкость динамика и наушников не разделена.   -  person John    schedule 07.04.2017


Ответы (1)


Согласно Джону Говорю,

Это встроенная функция устройств, вы не можете установить такую ​​высокую громкость, пока пользователь не разрешит это сам, так как это может повредить уши, и проблема в том, что громкость динамика и наушников не разделена.

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

Взгляните на это или это, чтобы отключить наушники.

person Feuby    schedule 10.04.2017