从睡眠模式唤醒时不会播放音频(android)
Posted
技术标签:
【中文标题】从睡眠模式唤醒时不会播放音频(android)【英文标题】:Audio will not play when awakened from sleep mode (android) 【发布时间】:2012-03-28 20:31:00 【问题描述】:我正在编写一个 android 闹钟应用程序。触发警报时,我可以正常启动活动(它会唤醒手机,关闭键盘保护并显示警报视图),但是如果闹钟响起时设备处于睡眠模式。 (当设备处于唤醒状态且键盘保护处于打开状态时,它听起来确实很完美。)我正在使用唤醒锁。我试过使用 MediaPlayer 和 SoundPool 没有成功。我缺少某种许可吗? (我已经拥有 WAKE_LOCK、DISABLE_KEYGUARD 和 RECEIVE_BOOT_COMPLETED 权限。)
当使用 SoundPool 进行调试时,我执行的加载会返回一个有效的声音 ID 整数 (1),但永远不会触发 onLoadComplete 侦听器(这是播放声音的地方)。当设备处于唤醒状态时,它会正常触发。
有人有任何想法或遇到过同样的问题吗?
【问题讨论】:
找到了解决方案!我被要求在类的 onCreate() 方法中播放音频。我将其移至 onResume() ,因为这是当您知道设备完全唤醒并且活动可见、位于顶部且处于焦点时。 【参考方案1】:找到了解决办法!我被要求在类的 onCreate() 方法中播放音频。我将其移至 onResume() ,因为此时您知道设备已完全唤醒并且活动可见、位于顶部且处于焦点位置。
【讨论】:
您也可以使用 onStart(),因为它总是在 onCreate() 之后调用,而 onResume() 并非总是如此。干杯!【参考方案2】:我最近遇到了同样的问题。我解决这个问题的方法是阅读你的答案,但也通过记录发生的事情来检查活动流程。基本上onCreate
、onStart
、onResume
、onPause
、onStop
、onStart
、onResume
是按照这个顺序被解雇的。这是一个作为警报屏幕启动的活动。
我将初始化代码保留在 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());
然后在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,它有效!
【讨论】:
以上是关于从睡眠模式唤醒时不会播放音频(android)的主要内容,如果未能解决你的问题,请参考以下文章
允许计算机在从 Windows 应用程序播放音频时进入睡眠状态
创建新的随机音频文件时,播放随机音频 onClick 不会重置 - Android