У меня есть важные напоминания, которые устанавливаются с помощью диспетчера будильников (он должен работать так же, как приложение-будильник).
Раньше в моем манифесте Android было следующее:
<receiver android:name="com.example.app.AlarmReceiver" >
<intent-filter>
<action android:name="${packageName}.alarm.action.trigger"/>
</intent-filter>
</receiver>
Приемник вещания:
public class AlarmReceiver extends BroadcastReceiver {
@Override public void onReceive(
final Context context,
final Intent intent) {
// WAKE LOCK
// BUILD NOTIFICATION etc...
}
}
Как устанавливается будильник:
final PendingIntent operation = PendingIntent.getBroadcast(
mContext,
requestCode,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
if (PlatformUtils.hasMarshmallow()) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
}
}
С Android 8.0 я больше не могу использовать неявную трансляцию, как определено в Manifest. Ничего страшного, есть альтернатива - зарегистрировать его вручную, вот так:
final BroadcastReceiver receiver = new AlarmReceiver();
final IntentFilter intentFilter = new IntentFilter(ALARM_RECEIVER_INTENT_TRIGGER);
context.registerReceiver(receiver, intentFilter);
Мне это не кажется логичным.
Приемник тревоги будет привязан к времени жизни контекста. Это вызывает проблему, если, скажем, приложение было убито из-за нехватки памяти или при перезапуске устройства. Мне нужно, чтобы мои будильники срабатывали каждый раз, так как они критически важны для здоровья пользователя.
Даже если я слушаю "android.intent.action.BOOT_COMPLETED" и регистрирую свой приемник сигналов тревоги, приложение вскоре прекращается, и сигнал тревоги не срабатывает. Я тоже не вижу свой будильник через
adb shell dumpsys будильник
Как создать настраиваемый широковещательный приемник, который принимает неявное широковещательное сообщение для срабатывания сигнализации при нацеливании на Android O (8.0)? Может ли кто-нибудь просветить меня примером кода или ссылкой на документацию. Как Timely или любое другое приложение-будильник работает при нацеливании на O?