因此,我希望变量在一天的特定时间重置为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的位置。现在,如果用户在该时间之前(而不是在此时间之后)打开该应用程序,则它可以工作。因此,我想如果您在第二天的特定时间之后重新打开该应用程序。有任何想法吗? :)