Android在广播接收器中重复警报

时间:2015-08-08 06:56:35

标签: android broadcastreceiver alarmmanager

我的闹钟开始通知服务。我希望每个月的第7天每天14点发出警报

我的收件人:

public class AlarmReceiver extends BroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;

@Override
public void onReceive(Context context, Intent intent) {
    System.out.println("RECEIVER STARTED");
    if (checkForDay()) {
        alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent1 = new Intent(context, AlarmService.class);
        alarmIntent = PendingIntent.getService(context, 0, intent1, 0);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 14);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
        System.out.println("ALARM SET");
    } else
        System.out.println("ALARM NOT SET");
}

private boolean checkForDay() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    return calendar.get(Calendar.DATE) == 7;

}

我的接收器从BOOT_COMPLETE开始,并从MainActivity onCreate()中的广播开始; 但是有问题。

  1. 如果用户保持手机24/7启动怎么办
  2. 用户可以在14:00之后启动我的应用程序并立即触发警报 - 不需要它。仅在14:00
  3. Uset可能忘记启动我的应用程序并且警报根本不会启动
  4. 如果setInexactRepeating()不好,如何实现正确重复每月警报,因为间隔。每个月都不一样了?

1 个答案:

答案 0 :(得分:0)

案例1:[如果用户保持手机24/7启动怎么办]

在这种情况下,一切都会顺利进行。当警报在第7天的14:00发出警报时,您可以为下一个第7天设置下一个警报

案例2:[用户可以在14:00之后启动我的应用程序并立即触发警报 - 不要它。仅在14:00]

在这种情况下,只需添加一个检查来处理或不处理您需要在每个月的第7天14:00执行的逻辑

案例3:[用户可能忘记启动我的应用程序并且警报根本不会启动]

你可以使用重启事件,它可以工作。