当从睡眠模式唤醒时,音频将不会播放(安卓系统)



我正在编写一个Android报警应用程序。当闹钟响起时,我可以让活动正常启动(它会唤醒手机,关闭键盘并显示闹钟视图),但如果闹钟响起时设备处于睡眠模式,我一辈子都无法让闹钟响起。我尝试过使用MediaPlayer和SoundPool,但没有成功。我是不是缺少某种许可?(我已经拥有WAKE_LOCK、DISABLE_KEYGUARD和RECEIVE_BOOT_COMPLETED权限。)

当使用SoundPool进行调试时,我执行加载,该加载返回一个有效的声音ID整数(1),但onLoadComplete侦听器(这是播放声音的地方)从未启动。当设备处于清醒状态时,它会正常工作。

有没有人有任何想法或遇到过同样的问题?

找到了解决方案!我调用了该类的onCreate()方法来播放音频。我把它移到了onResume(),因为这是当你知道设备是完全清醒的,活动是可见的,在顶部和焦点上。

我最近遇到了同样的问题。我解决这个问题的方法是阅读你的答案,但也通过记录发生的事情来检查活动流程。基本上,onCreateonStartonResumeonPauseonStoponStartonResume按该顺序发射。这是一个作为警报屏幕启动的活动。

我将初始化代码保留在onStart方法中,确保使用.prepare()而不是prepareAsync(),因为我使用的是本地声音。

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());
}

然后在onPauseonStop方法中,我添加了:

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

onResume方法中,我添加了媒体播放代码:

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

哈,行了!

最新更新