Java 在特定时间重置变量(在应用程序重新启动后也继续执行此操作)
所以我想要一个变量在一天中的特定时间重置为0。我让这部分工作 但每次应用程序重新启动时,警报就会停止工作 我得到了一个“时间选择器”,它从用户那里获取时间,然后调用这个方法Java 在特定时间重置变量(在应用程序重新启动后也继续执行此操作),java,android,alarmmanager,Java,Android,Alarmmanager,所以我想要一个变量在一天中的特定时间重置为0。我让这部分工作 但每次应用程序重新启动时,警报就会停止工作 我得到了一个“时间选择器”,它从用户那里获取时间,然后调用这个方法 public void setAlarmResetDose(long timeInMillis) { AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent =
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);
}
上面的方法调用类“AlarmResetTake”,它是一个“BroadcastReceiver”类,运行代码重置变量
但就像我说的,这只在应用程序运行时起作用。当应用程序重新启动时,只有当用户使用“计时器选择器”输入新时间时,警报才会再次开始工作
我试图解决这个问题
我使用了时间选择器中的代码,并将其保存在一个变量中:
timeDoseResetTotal = calendar.getTimeInMillis();
我还使用SharedReferences来节省这段时间
然后,在MainActivity onCreate中,我加载了SharedReferences值,并使用该值运行方法“setAlarmResetDoSetTimedOseResetTotal;”
然而,这似乎不起作用
有人知道我该怎么做吗/
编辑:
我创建了这个方法,并在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());
其中TIMEDOSERESETHOURE和timeDoseResetMin加载了来自早期版本的SharedReferences。现在,如果用户在该时间之前打开应用程序,而不是在该时间之后打开应用程序,则该功能可以正常工作。所以我猜如果你在特定时间后重新打开应用程序,它将在第二天开始运行。有什么想法吗 似乎是您需要的方法。这里的折衷是,每次警报响起时,您都需要重新安排警报时间。Edit 2:我在MainActivity中添加的最后一个代码实际上似乎不起作用。现在似乎更像是随机重置我的变量:“我将考虑未来安排警报的要求。谷歌对预定的后台工作非常严格,在更新的api上,不允许您在准确的时间设置警报。我会调查JobService类、JobScheduler类和整个JobAPI,看看这是否符合您的需要。好的,谢谢Elli。您认为我可以使用作业api在每天的特定时间重置变量吗?看起来AlarmManager实际上是基于此文档的正确类。稍后我将进一步研究您的问题,看看是否可以分析出问题所在。