我希望我的应用程序能够在启动时检测到新的一天。如果是新的一天,我希望它开始新的 Activity 并重复该循环。第二天。
我从获取一年中某天的日历实例开始。Calendar c = Calendar.getInstance();
int thisDay = c.get(Calendar.DAY_OF_YEAR);
long todayMillis = c.getTimeInMillis();
然后,我将其存储在共享的首选项中并获取另一个日期
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
long last = prefs.getLong("date", System.currentTimeMillis());
c.setTimeInMillis(last);
int lastDay = c.get(Calendar.DAY_OF_YEAR);
我在每天创建支票并循环运行时遇到麻烦。
if (lastDay != thisDay) {
scheduleAlarm();
SharedPreferences.Editor edit = prefs.edit();
edit.putLong("date", todayMillis);
edit.commit();
}
我的解决方案如下。
Calendar c = Calendar.getInstance();
int thisDay = c.get(Calendar.DAY_OF_YEAR);
long todayMillis = c.getTimeInMillis();
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
long last = prefs.getLong("date", System.currentTimeMillis());
c.setTimeInMillis(last);
int lastDay = c.get(Calendar.DAY_OF_YEAR);
// Toast.makeText(getApplicationContext(),
// "lastday " + lastDay + "thisDay " + thisDay, Toast.LENGTH_LONG)
// .show();
if (lastDay == thisDay) {
scheduleAlarm();
SharedPreferences.Editor edit = prefs.edit();
edit.putLong("date", todayMillis + 86400000);
edit.commit();
}
最佳答案
除了重新计划之外,还可以指定period值(86400000 =每天)以重复通知。
该任务会将日期与存储的值进行比较,例如使用System.currentTimeMillis()持续存在一个时间戳记(SharedPreferences),以查明日期是否更改并将当前值写回到首选项中。
在启动时执行一次该任务。