【发布时间】:2017-04-06 13:21:40
【问题描述】:
您好,我已经根据确切的警报以 15 分钟的间隔创建了一个警报,我正在创建一个重复 15 分钟的警报,但重复的警报不能正常工作。
//计算精确的 15 分钟间隔
public static long calculateInterval() {
Calendar calendar = Calendar.getInstance();
int m = calendar.get(Calendar.MINUTE);
Calendar alarm = Calendar.getInstance();
alarm.set(Calendar.HOUR_OF_DAY, Integer.parseInt(getCurrentTimeIn24Hrs().split(":")[0]));
alarm.set(Calendar.MINUTE, Integer.parseInt(getCurrentTimeIn24Hrs().split(":")[1]));
alarm.set(Calendar.SECOND, 0);
alarm.set(Calendar.MILLISECOND, 0);
long start = alarm.getTimeInMillis();
long remain = 0;
if (m < 15) {
remain = 15 - m;
} else if (m < 30) {
remain = 30 - m;
} else if (m < 45) {
remain = 45 - m;
} else {
remain = 60 - m;
}
remain = start + remain * 60 * 1000;
return remain;
}
public void setAlarm() {
Log.i("Service++++", "Alarm set");
Intent myIntent = new Intent(mContext, SetAlarm.class);
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1234, myIntent, 0);
int ALARM_TYPE = AlarmManager.RTC;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
am.setExact(ALARM_TYPE, Utility.calculateInterval(), pendingIntent);
else
am.set(ALARM_TYPE, Utility.calculateInterval(), pendingIntent);
}
//重复报警
public void setRepeatingAlarm() {
Intent alarmIntent = new Intent(mContext, UpdateServiceAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1236, alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 0);
calendar.add(Calendar.MILLISECOND, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
}
【问题讨论】:
-
没有让你正确。在一个每隔 15 分钟定期触发的警报中,您正在设置另一个同样以 15 分钟间隔重复的警报?
-
@Radhey 第一个警报我正在计算下一个准确的 15 分钟,基于我每 15 分钟间隔创建重复警报
-
你为什么要这样计算#exact 15 min!只需按照毫秒设置 15 分钟间隔。就是这样。在完成第一个定期警报的 15 分钟后,这也会更新您创建的第二个警报。
-
在 15 分钟内不应发出警报,例如 10:00、10:15、10:30 等,
-
第一次报警没有问题。重复报警是问题
标签: android alarmmanager android-alarms