使用Android跟踪多个警报

我需要设置每周重复一次的多个警报,以在用户上某堂课(这是一个学术应用程序)时自动使手机振动,然后在上课结束后重置音量.

我已经创建了警报,但是如果用户禁用了此功能,则必须有一种停用所有警报的方法.我也知道我必须通过向AlarmManager.cancel()方法传递和意图使用相同的参数来执行此操作,但是这里的问题是:

用户可以取消课程并注册课程(但不能直接在应用程序中注册),并且该信息已更新并反映在数据库中,仅保留当前课程.因此,如果我对不再存在的类设置了警报,那么如果我无法复制PendingIntent,该如何取消它?

我在这里看到的一个解决方案是创建一个db表来跟踪当前警报,然后对它们进行完全控制,另一种方法是在更新类列表时取消并重置所有警报,但是这样做很公平.时间,第三个但不太友好的选择是简单地等待用户启动电话,并且在重置警报时,只需设置我需要的警报即可(如果我在此启动行为上有误,请更正).我应该尝试第四种选择吗?如果足够好,可以选择其中一种?

解决方法:

首先,您不需要设置多个警报.只需设置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);
    }
}
上一篇:【1029 | Day55】自定义分页器


下一篇:android-使用警报管理器启动服务