在特定时间重置变量(在应用重启后也要继续执行此操作)

时间:2019-06-29 19:58:31

标签: java android alarmmanager

因此,我希望变量在一天的特定时间重置为0。我这部分工作了。

但是,每次应用程序重新启动时,警报都会停止工作。

我有一个“ TimePicker”,它从用户那里获取时间,然后调用此方法。

public void setAlarmResetDose(long timeInMillis) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Intent intent = new Intent(this, AlarmResetTaken.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent);
}

以上方法调用类“ AlarmResetTaken”,该类是“ BroadcastReciver”类,该类运行代码以重置变量。

但是就像我说的那样,只有在应用程序运行的情况下,这才起作用。当应用重新启动时,仅当用户使用“ TimePicker”输入新时间时,警报才再次开始工作。

我解决问题的尝试

我使用了TimePicker中的代码并将其保存在变量中:

timeDoseResetTotal = calendar.getTimeInMillis();

我还使用了sharedPreferences来节省时间。

然后在MainActivity onCreate中,我加载了sharedPreferences值并运行了“ setAlarmResetDose(timeDoseResetTotal);”方法(带有该值)。

但是,这似乎不起作用。

有人对我如何使它起作用有任何想法吗? :/

修改:

我创建了此方法,并在MainActivity onCreate中对其进行了调用。

    public  void startAlarmBroadcastReceiver() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH),
                timeDoseResetHour,
                timeDoseResetHour,
                0

        );
        setAlarmResetDose(calendar.getTimeInMillis());

先前从“ timeDoseResetHour”和“ timeDoseResetMin”加载了SharedPreferences的位置。现在,如果用户在该时间之前(而不是在此时间之后)打开该应用程序,则它可以工作。因此,我想如果您在第二天的特定时间之后重新打开该应用程序。有任何想法吗? :)

1 个答案:

答案 0 :(得分:1)

AlarmManager.setExactAndAllowWhileIdle似乎是您需要的方法。这里要权衡的是,每次闹钟响起时,您都需要重新安排它的时间。