为 AlarmManager 设置自定义间隔

Set custom interval for AlarmManager

如何在两个自定义日期之间设置闹钟。例如,从 19/12/2017 - 20/12/2018。我该怎么做 ?。请帮助我

AlarmManager.INTERVAL_DAY只是一天中毫秒数的长表示。

您可以传递任何您想要的自定义 long 值。

例如,2 天 3 小时就是

`AlarmManager.INTERVAL_DAY` * 2 + `AlarmManager.INTERVAL_HOUR` * 3

或者你也可以这样计算

1 秒 = 1000

1 分钟 = 60 * 秒 ...等等

如果你想在未来的特定日期触发警报,你可以使用 AlarmManager.set()AlarmManager.setExact()..etc 并从 date/calendar 对象传递毫秒对应你的日期。

new Date(2017, 5, 12).getTime()Calendar.getTime().getTime()

您可以简单地调用 setExact,然后在每个 PendingIntent 中,首先检查时间是否在您的阈值之前,如果是,则再次 setExact

public void scheduleAlarm() {
    alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent("myIntent");
    alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

    alarmMgr.setExact(TYPE, ALARM_INTERVAL, alarmIntent);
}

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("myIntent")) {
            //do something
            if (timeHasNotPassedYet(Calendar.getInstance())) {
                scheduleAlarm();
            }
        }
    }
}

警报将被安排到 timeHasNotPassedYet returns false。届时新闹钟将不会重新安排。