对于特定的SDK版本> = 24,每天在特定时间重复执行一项任务

时间:2019-03-08 13:58:12

标签: java android alarmmanager

我正在寻找一种可能性,可以每天在特定时间在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秒(?)触发一次,这是什么原因导致计数器每次都会重置步骤。所以我的问题是:是否有可能像上述那样触发某些事件来解决任务?

0 个答案:

没有答案