1 回答

TA貢獻2036條經(jīng)驗 獲得超8個贊
嘗試改變
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);
到
long dateTime = calendar.getTimeInMillis();
if (dateTime <= System.currentTimeMillis()) {
time = dateTime + 24 * 3600 * 1000;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, dateTime ,
AlarmManager.INTERVAL_DAY, pendingIntent);
} else {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, dateTime ,
AlarmManager.INTERVAL_DAY, pendingIntent);
}
如果您閱讀了與AlarmManager相關(guān)的 Android 文檔
從 API 19 (Build.VERSION_CODES.KITKAT) 開始,警報傳遞不準確:操作系統(tǒng)將轉(zhuǎn)移警報以盡量減少喚醒和電池使用。有新的 API 來支持需要嚴格交付保證的應用程序;請參閱setWindow(int, long, long, android.app.PendingIntent)和setExact(int, long, android.app.PendingIntent)。targetSdkVersion 早于 API 19 的應用程序?qū)⒗^續(xù)看到以前的行為,即所有警報都在請求時準確傳遞。
編輯:
我建議在完成各自的任務后,在您的 broadcastReceiver 中調(diào)用您的setAlarmDaily和方法。setAlarmRelease并更改一次警報的方法。像這樣:
long dateTime = calendar.getTimeInMillis();
if (dateTime <= System.currentTimeMillis()) {
time = dateTime + 24 * 3600 * 1000;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//alarmManager.setExact(AlarmManager.RTC_WAKEUP, dateTime, pendingIntent); // not suggested
// 15 mins of window to call the alarm and have battery optimization
long windowMillis = 15 * 60 * 1000L;
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, dateTime ,
windowMillis, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, dateTime, pendingIntent);
}
添加回答
舉報