Java 在特定时间重置变量(在应用程序重新启动后也继续执行此操作)

Java 在特定时间重置变量(在应用程序重新启动后也继续执行此操作),java,android,alarmmanager,Java,Android,Alarmmanager,所以我想要一个变量在一天中的特定时间重置为0。我让这部分工作 但每次应用程序重新启动时,警报就会停止工作 我得到了一个“时间选择器”,它从用户那里获取时间,然后调用这个方法 public void setAlarmResetDose(long timeInMillis) { AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent =

所以我想要一个变量在一天中的特定时间重置为0。我让这部分工作

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

我得到了一个“时间选择器”,它从用户那里获取时间,然后调用这个方法

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实际上是基于此文档的正确类。稍后我将进一步研究您的问题,看看是否可以分析出问题所在。