Альтернативный подход, который я использовал для выполнения действия при изменении даты.
На самом деле Intent.ACTION_DATE_CHANGED работает только с датой расширенного срока, а не с предыдущей датой, когда вы изменяетедата на телефоне вручную.Кроме того, когда вы устанавливаете время в 11:59 и ждете, пока оно станет 00:00, чтобы дать вам событие трансляции изменения даты, оно не даст вам триггера.
Итак, я закончил тем, что создал свою собственную логику сохранения даты в общем префе, а затем проверил, является ли текущая дата позже или раньше ранее сохраненной даты (с некоторой логикой обработки даты) и обновил мои данные на основе этого,
private void takesomeActionIfDateIsChanged() {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
long currentDateTimeInMillis = System.currentTimeMillis();
Date currentDateWithMillis = new Date(currentDateTimeInMillis);
String formattedCurrentDateWithOnlyDMYStr = dateFormat.format(currentDateWithMillis);
Log.d(TAG, "formattedCurrentDate With Only DateMonthAndYear String : " + formattedCurrentDateWithOnlyDMYStr);
Date formattedCurrentDate = dateFormat.parse(formattedCurrentDateWithOnlyDMYStr);
String storedDateStr = mSpManager.getStoredDate(SPManager.STORED_DATE);
Log.d(TAG, "storedDateStr : " + storedDateStr);
Date storedDateOnlyWithDateMonthAndYear = dateFormat.parse(storedDateStr);
if (formattedCurrentDate.after(storedDateOnlyWithDateMonthAndYear)) {
Log.d(TAG, "The current date is after stored date");
mSpManager.putNewDate(SPManager.STORED_DATE, formattedCurrentDateWithOnlyDMYStr);
mCounter = 0;
} else if (formattedCurrentDate.before(storedDateOnlyWithDateMonthAndYear)) {
Log.d(TAG, "The current date is before stored date");
mSpManager.putNewDate(SPManager.STORED_DATE, formattedCurrentDateWithOnlyDMYStr);
mCounter = 0;
} else {
Log.d(TAG, "The current date is same as stored date");
}
} catch (Exception e) {
Log.e(TAG, "exception : ", e);
}
}