Звук не воспроизводится при выходе из спящего режима (Android) - PullRequest
1 голос
/ 29 марта 2012

Я пишу приложение тревоги для Android. Я могу заставить активность работать правильно, когда сработает будильник (он будит телефон, выключает клавиатуру и показывает вид сигнала тревоги), но я не могу на всю жизнь заставить звучать будильник, если устройство находится в спящем режиме, когда сработала сигнализация. (Звучит отлично, когда устройство находится в активном состоянии и клавиатура включена.) Я использую блокировку от пробуждения. Я пытался использовать MediaPlayer и SoundPool безуспешно. Есть ли какое-то разрешение, которое мне не хватает? (У меня уже есть разрешения WAKE_LOCK, DISABLE_KEYGUARD и RECEIVE_BOOT_COMPLETED.)

При отладке с использованием SoundPool я выполняю загрузку, которая возвращает действительное целочисленное значение идентификатора звука (1), но прослушиватель onLoadComplete (именно здесь воспроизводится звук) никогда не запускается. Он работает очень хорошо, когда устройство не спит.

Кто-нибудь есть идеи или сталкивался с той же проблемой?

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Нашли решение! У меня был вызов для воспроизведения аудио в методе onCreate () класса. Я переместил его в onResume (), поскольку это происходит, когда вы знаете, что устройство полностью активировано и активность видна сверху и в фокусе.

0 голосов
/ 04 декабря 2016

Я недавно столкнулся с той же проблемой. Я решил это, прочитав ваш ответ, а также проверив последовательность действий, зарегистрировав происходящее. В основном onCreate, onStart, onResume, onPause, onStop, onStart, onResume были запущены в этом порядке. Это было действие, которое было запущено как экран тревоги.

Я сохранил код инициализации в методе onStart, убедившись, что вместо prepareAsync() используется .prepare(), поскольку я использую локальные звуки.

try {
    Log.d(LOG_TAG, "Setting media player URI: " + alarmTone.toString());
    //mMediaPlayer = MediaPlayer.create(this, );
    mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setDataSource(getApplicationContext(), alarmTone);
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
    mMediaPlayer.setLooping(true);
    mMediaPlayer.setVolume(100, 100);
    mMediaPlayer.prepare();
} catch (Exception ex) {
    Log.d(LOG_TAG, "Exception from media player: " + ex.getMessage());
}

Затем внутри методов onPause и onStop я добавил:

if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
    mMediaPlayer.pause();
}

В методе onResume я добавил код воспроизведения мультимедиа:

if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
    Log.d(LOG_TAG, "Playing alarm through Media Player");
    mMediaPlayer.start();
}

Huzzah, все работает!

...