在特定时间重置变量(在应用重启后也继续这样做)
Reset a variable on a specific time (also keep doing this after app restart)
所以我想要一个变量在一天中的特定时间重置为 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);
}
上述方法调用 class“AlarmResetTaken”,它是一个“BroadcastReciver”class,它运行代码来重置变量。
但是就像我说的那样,只要应用程序是 运行,这就有效。当应用程序重新启动时,只有当用户使用“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。如果用户在该时间之前打开应用程序,它现在可以工作,但不能在之后。所以我想如果你在第二天的特定时间之后重新打开应用程序。有任何想法吗? :)
AlarmManager.setExactAndAllowWhileIdle
似乎是您需要的方法。这里的权衡是您需要在每次响起时重新安排此警报。
所以我想要一个变量在一天中的特定时间重置为 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);
}
上述方法调用 class“AlarmResetTaken”,它是一个“BroadcastReciver”class,它运行代码来重置变量。
但是就像我说的那样,只要应用程序是 运行,这就有效。当应用程序重新启动时,只有当用户使用“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。如果用户在该时间之前打开应用程序,它现在可以工作,但不能在之后。所以我想如果你在第二天的特定时间之后重新打开应用程序。有任何想法吗? :)
AlarmManager.setExactAndAllowWhileIdle
似乎是您需要的方法。这里的权衡是您需要在每次响起时重新安排此警报。