Я пытаюсь воспроизвести звук будильника через динамики через канал будильника на максимальной громкости. Для этого я использую 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, независимо от того, подключены наушники или нет.
Я действительно заметил, что с подключенными наушниками, когда индикатор громкости установлен на максимум, если я уменьшу его и снова быстро увеличу, он увеличится до громкости, которая есть без наушников. Однако, поскольку для этого требуется взаимодействие с пользователем, это не то решение, которое я ищу.