为什么RTC_WAKEUP不起作用?

时间:2012-12-06 19:40:16

标签: android alarmmanager real-time-clock

public void runSound(){

    Intent it = new Intent(Values.TAG_EXECUTE_ALARM);
    PendingIntent pendIntent = PendingIntent.getBroadcast(this, 0, it, 0);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND,0);

    AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
    long time = calendar.getTimeInMillis();
    alarm.set(AlarmManager.RTC_WAKEUP,time,pendIntent);
}

从服务调用此方法。即使设备处于睡眠模式,我的服务也应发出声音通知用户。

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent arg1) {
    MediaPlayer player = MediaPlayer.create(arg0, R.raw.order_alarm);
    player.setAudioStreamType(AudioManager.STREAM_ALARM);

    player.start();

}

这是实际播放声音的类。不幸的是,设备没有唤醒,声音也没有播放。当设备进入睡眠模式之前调用runSound时,声音完好无损......有什么想法吗?

编辑:

- >删除了静态引用(是的,它们很笨,因为runSound在服务中)。

- >是的,标签值在接收器intent-filter

中定义

- >改进了问题。

1 个答案:

答案 0 :(得分:0)

好吧,我现在无法测试,但看看你的代码,我可以看到一些问题。

在getBroadcast()中,最后一个参数必须是一个标志,如“FLAG_CANCEL_CURRENT”,我不确定0是否是有效标志。

并且在“很长时间= calendar.getTimeInMillis();”它看起来像你过去的时间,如果它是在过去,它将无法运行,尝试添加5000(5s)。

所有其他事情对我来说都很好。