Android重复闹钟无效

时间:2011-01-15 14:21:24

标签: android repeat alarm

这很好用:

Intent intent = new Intent(HelloAndroid2.this, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(HelloAndroid2.this, 0,
    intent, PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), pendingIntent);

这不起作用。我只听到闹钟的声音。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), 3 * 1000, pendingIntent);

我也试过这个,没有运气:

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

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7000, pendingIntent);

有什么问题?

2 个答案:

答案 0 :(得分:4)

来自FLAG_ONE_SHOT的PendingIntent doc

  

这个PendingIntent可以   只能使用一次。如果设置,之后   调用send()就可以了   为您和任何人自动取消   将来尝试通过它发送   失败。

所以在pendingIntent第一次被触发后,它将被取消,下一次通过警报管理器发送它的尝试将失败

尝试使用FLAG_UPDATE_CURRENT

答案 1 :(得分:0)

按顺序查看代码示例:

在您的第一个示例中,您正在使用AlarmManager.set - 这仅限于一次性警报,所以是的,它只会触发一次。如果你想使用AlarmManager.set,那么代码触发的最后一件事就是设置一个新的警报(它也应该使用一个新的PendingIntent)。

在您的第二个示例中,您正在使用重复警报。每次激活时,需要创建一个新的PendingIntent,因为操作系统会处理警报的重复方面。

没有理由说你的闹钟不应该每3秒重复一次,所以我会开始查看你为处理闹钟而编写的BroadcastReceiver实现。

检查您是否已正确实施。注释掉onReceive()方法中的所有代码,而只是让它编写一条日志消息。每当警报触发时,您都会看到日志消息出现在logcat中,请将代码重新添加(保留日志消息),并将另一条日志消息添加到方法的末尾。这允许您查看该方法执行所需的时间 - 您希望在警报再次触发之前完成该操作以避免任何意外的副作用。

顺便说一下,如果你想要一个重复的警报,android.os.Handler是一种更有效的方法,虽然通过AlarmManager设置的警报可以非常准确地触发。