2012-03-28 76 views
1

我正在编写Android闹钟应用程序。当警报被触发时,我可以将活动正确完成(它会唤醒手机,关闭键盘并显示警报视图),但是如果发生警报,​​我不能在一生中听到警报声当警报关闭时,设备处于睡眠模式。 (当设备处于唤醒状态并且键盘保持打开状态时,它听起来很完美。)我正在使用唤醒锁。我尝试过使用MediaPlayer和SoundPool没有成功。有没有我失踪的某种权限? (我已经有WAKE_LOCK,DISABLE_KEYGUARD和RECEIVE_BOOT_COMPLETED权限。)从睡眠模式唤醒时音频不会播放(android)

当使用SoundPool进行调试时,我执行负载,返回一个有效的声音ID integer(1),但是onLoadComplete监听器(这是播放声音的地方)永远不会被解雇。当设备醒来时它会很好地启动。

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

+1

找到解决方案!我有电话在类的onCreate()方法中播放音频。我将它移到了onResume()上,因为这是在您知道设备完全清醒并且活动可见时在顶部和焦点上。 – user1299177 2012-03-28 21:30:18

回答

3

找到解决方案!我有电话在类的onCreate()方法中播放音频。我将它移到了onResume()上,因为这是在您知道设备完全清醒并且活动可见时在顶部和焦点上。

+0

为我节省了很多麻烦......谢谢。 – DrkStr 2013-09-26 19:40:24

+0

你也可以使用onStart(),因为它总是在onCreate()之后调用,而onResume()并不总是这样。干杯! – 2015-04-13 13:23:25

0

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

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

好哇,它的作品!