Мое приложение отправляет ежедневное уведомление (это работает правильно), но после перезагрузки устройства уведомление не запускается снова.
Я пытаюсь установить BroadcastReceiver, который слушает BOOT_COMPLETED, но безрезультатно.
AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
...
<receiver android:name=".helpers.notification.AlarmRebootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
BroadcastReceiver:
public class AlarmRebootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context oContext, Intent intent) {
try {
Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
notificationIntent.addCategory("android.intent.category.DEFAULT");
String notificationMessage = TMLocale.getStringResourceByName("reminder_newthought");
String notificationTitle = TMLocale.getStringResourceByName("app_name");
TMNotification.Notify(notificationTitle, notificationMessage, Enum.ArtAndWordsNotification.NEWTHOUGHT, oContext);
TMNotification.cancelNewThoughtAlarm(oContext);
scheduleNewThoughtAlarm(oContext);
} catch (Exception e) {
ExceptionHandler.logException(e);
}
}
private void scheduleNewThoughtAlarm(Context oContext) {
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minutes = cal.get(Calendar.MINUTE) + 1;
int seconds = cal.get(Calendar.SECOND);
Calendar newCalendar = TMDate.generateCalendar(day, month, year, hour, minutes, seconds);
TMNotification.scheduleNewThoughtAlarm(oContext, newCalendar, null);
}
}
Я установил загрузочный приемник включенным в false в AndroidManifest и установил его в true по коду при создании тревоги, как это предлагается в официальных документах (это так, что вы слушаете загрузку завершено только при необходимости).
Где запускается уведомление:
private static void doNewThoughtSchedule(Context oContext, int reminderPreference, boolean randomNotificationsPreference,
Calendar calendar, Intent notificationIntent){
ComponentName receiver = new ComponentName(ApplicationContext.get(), AlarmRebootReceiver.class);
PackageManager pm = ApplicationContext.get().getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
...
}
В коде все нормально, но перезагрузка устройствабольше не будет отправлять уведомления.
Пробовал на устройстве Huawei Android 9, а также на старом телефоне Android 4.4. Никто не работал.
Любая помощь?
PS. Метод TMNotification.scheduleNewThoughtAlarm не имеет значения, поскольку он работает нормально (установка простого тоста даже не будет отображаться в onReceive).
PS2. Это странно, но точно следование официальным документам здесь не приводит к искажению: https://developer.android.com/training/scheduling/alarms.html#java (где заголовок «Запустить сигнал при перезагрузке устройства»).