我正在寻找一种可能性,可以每天在特定时间在Android中执行任务。更具体地说,它是一个计步器应用程序,应该每天在午夜重置计数的步数。我试图使用Alarmmanager和BroadcastReceiver解决这样的任务:
private void resetStepsAtMidnight() {
// Zeit für Reset
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(java.util.Calendar.HOUR_OF_DAY, 23);
calendar.set(java.util.Calendar.MINUTE, 59);
calendar.set(java.util.Calendar.SECOND, 0);
Intent intent = new Intent(this, ResetStepsReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RC_RESET, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//Zurücksetzen täglich wiederholen
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if(alarmManager != null) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
//alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY ,alarmIntent);
}
}
此解决方案可以正常运行,但由于setExactAndAllowWhileIdle不重复,因此用户每天必须至少打开一次该应用。将第二个选项与setRepeating一起使用将每天重复一次任务,但由于Android的新能源管理,因此不完全正确。午夜过后很可能会触发。在这种情况下,它将保持每40秒(?)触发一次,这是什么原因导致计数器每次都会重置步骤。所以我的问题是:是否有可能像上述那样触发某些事件来解决任务?