从睡眠模式唤醒时不会播放音频(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】:

我最近遇到了同样的问题。我解决这个问题的方法是阅读你的答案,但也通过记录发生的事情来检查活动流程。基本上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();

Huzzah,它有效!

【讨论】:

以上是关于从睡眠模式唤醒时不会播放音频(android)的主要内容,如果未能解决你的问题,请参考以下文章

允许计算机在从 Windows 应用程序播放音频时进入睡眠状态

如何在睡眠模式下唤醒 Android Wear?

创建新的随机音频文件时,播放随机音频 onClick 不会重置 - Android

在Android中,当我播放音频并转到其他活动时,音频回来后不会停止

Swift 3 如何覆盖静音模式并从后台播放音频

通过 phonegap 和 cordova for Android 播放音频