我正在尝试为我的应用添加“提醒”功能,让用户在“每天提醒我”,“每周提醒我”等选项中进行选择。
所以我刚刚创建了一个警报:
Intent notificationIntent = new Intent(this, BQBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 24HOURS,
24HOURS,
pendingIntent);
到目前为止一切顺利。但是如果用户重新启动手机会发生什么?重启后将删除所有警报。我已经有一个BootBroadcastReveicer来重新启动警报,但是我要在重启后将警报周期设置为什么?
假设用户将闹钟设置为“在1天内提醒我”。然后将闹钟设置为24小时。但用户在23小时后重启手机。然后我的BootBroadcastReceiver在24小时内发出另一个警报。但我需要它在1小时内,而不是!
我该如何解决这个问题?我是否必须不断检查警报上还剩多少时间,并不断将其写入我的sharedPreferences,这样我就能重新启动重启后的剩余时间?似乎不是一个好方法。
有什么想法吗?
答案 0 :(得分:0)
您只需计算在BootBroatcastReceiver
内发布通知之前的剩余时间。
例如
private long getNextNotificationTime() {
long value = // calculate milliseconds until next notification
return value;
}
现在,在接收器中使用此值。
long nextAlarmTime = this.getNextNotificationTime();
Intent notificationIntent = new Intent(this, BQBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
nextAlarmTime,
24HOURS,
pendingIntent);
这意味着你的闹钟只需要在开机时重新计算,然后每隔24小时开一次。
答案 1 :(得分:0)
public long setAlarm( int id, int AlermHour, int AlermMinute,String title, String detail) {
Intent intent = new Intent(c, OnetimeAlarmReceiver.class);
intent.setData(Uri.parse("timer:" + id));
intent.putExtra("title", title);
intent.putExtra("detail", detail);
AlarmManager alarmMgr0 = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent0 = PendingIntent.getBroadcast(c, id, intent, 0);
Calendar timeOff9 = Calendar.getInstance();
timeOff9.set(Calendar.HOUR_OF_DAY, AlermHour);
timeOff9.set(Calendar.MINUTE, AlermMinute);
timeOff9.set(Calendar.SECOND, 0);
long _alarm = 0;
if(timeOff9.getTimeInMillis() <= System.currentTimeMillis())
_alarm = timeOff9.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1);
else
_alarm = timeOff9.getTimeInMillis();
alarmMgr0.setRepeating(AlarmManager.RTC_WAKEUP, _alarm,24*60*60*1000,pendingIntent0);
return _alarm;
}
使用此方法并使用闹钟时间,闹钟最小值来设置闹钟时间。它将自动设置您的时间而不是计算剩余时间。