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