0

我正在尝试向我的应用程序添加“提醒”功能,并让用户在“每天提醒我”、“每周提醒我”等选项之间进行选择。

所以我刚刚创建了一个警报:

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,这样我才能在重新启动后重新创建剩余时间?好像不是什么好办法。

有任何想法吗?

4

2 回答 2

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 小时触发一次。

于 2013-08-16T21:51:28.293 回答
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;



    }

使用此方法,也可以使用 Alarm Hour、Alarm Min 来设置闹钟时间。它会自动设置你的时间而不是计算剩余时间。

于 2013-11-03T05:42:20.290 回答