В настоящее время я работаю над новым проектом android, который использует фоновую службу. Потому что android version> = Oreo автоматически убивает службу. Поэтому я использую AlarmManager. Мне нужно отображать уведомление о точном времени. Время для уведомления устанавливается в общих настройках. Мой обработчик аварийных сигналов следует
class AlarmHandler {
private Context context;
AlarmHandler(Context context){
this.context=context;
}
void setAlarmManager(){
Intent intent=new Intent(context,NotificationService.class);
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,2,intent,0);
AlarmManager alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if(alarmManager!=null){
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,5000,60000,pendingIntent);
}
}
void cancelAlarmManager(){
Intent intent=new Intent(context,NotificationService.class);
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,2,intent,0);
AlarmManager alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if(alarmManager!=null){
alarmManager.cancel(pendingIntent);
}
}
}
Моя служба уведомлений следует
public class NotificationService extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String t1=timeFromsharedPreferences("t1");
String t2=timeFromsharedPreferences("t2");
String systemTime=getCurrentTime();
if(systemTime.equals(t1)){
notify();
}else if(systemTime.equals(t2)){
notify();
}
}
}
Я запускаю AlarmHandler, используя следующий код
AlarmHandler alarmHandler=new AlarmHandler(this);
alarmHandler.cancelAlarmManager();
alarmHandler.setAlarmManager();
Я также регистрирую приемник широковещательной передачи как показано ниже
<receiver android:name=".NotificationService" android:enabled="true" />
Моя проблема в том, что иногда я пропускаю мое уведомление. Время запланировано на 22:00 и 7:00. Уведомление приходит в 22:00 (обратите внимание, что я использую телефон в 22:00 или использую за несколько минут до 22:00). Но уведомление в 7:00 приходит не все время. Также обратите внимание, что мне нужно получать уведомления каждый день в одно и то же время. Пожалуйста, помогите мне.