使用Android跟踪多个警报

时间:2012-05-02 13:32:01

标签: android alarmmanager android-alarms

我需要设置一些每周重复的闹钟,当用户在某个班级(这是一个学术应用程序)时自动让手机振动,然后在课程结束时重置音量。

我已经创建了警报,但如果用户禁用此功能,我必须有办法停用所有这些警报。我也知道我必须通过将相同的参数传递给AlarmManager.cancel()方法来实现,但问题是:

用户可以取消课程并注册课程(但不能直接在应用程序中注册),并且更新并反映在数据库中,只保留当前的课程。因此,如果我将警报设置为不再存在的类,如果我无法复制PendingIntent,如何取消它呢?

我在这里看到的一个解决方案是创建一个db表来跟踪当前的警报,然后我就可以完全控制它们,另一种方法是在更新类列表时取消并重置所有警报,但这样做花费相当多的时间,第三个但不太友好的选择是简单地等待用户启动手机,并且当重置警报时只需设置我需要的那些(如果我在这个启动行为上错了,请更正) 。我应该尝试第四个选项,或者其中一个选项是否足够好?

1 个答案:

答案 0 :(得分:4)

首先,您不需要设置多个警报。只需设置NEXT警报,然后当警报触发时,设置新的下一个警报。如果手机重新启动,这也可以在丢失时再次设置警报,因为您只需要考虑一个警报。

我用这个小例程来设置闹钟。 Set参数的值确定是否设置或取消警报。

public static void SetMyAlarm(Context c, long AlarmTime, Boolean Set) {
    Intent intent = new Intent(c, AlarmReceiver.class); // The broadcast receiver that will handle my alarm 

    int UniqueID =8192; // id for this specific alarm, use a different id for each separate alarm

    PendingIntent sender = PendingIntent.getBroadcast(c, UniqueID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
    if (Set) {
        am.set(AlarmManager.RTC_WAKEUP, AlarmTime, sender);
    } else {
        am.cancel(sender);
    }
}