Android диспетчер сигнализации стреляет в точный момент - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть приложение, которое должно выполнять задачу в указанное время, точно так же, как и обычный android будильник, который я использовал setExactAndAllowWhileIdle () / setExact () . Но BroadcastReciever срабатывает через несколько минут, а иногда и после открытия приложения, есть ли обходной путь для него?

Код установщика тревоги

// set Alarm
Intent intent = new Intent(this.context, AlarmReceiver.class);
intent.putExtra("alarmInfo", extraInfo);
intent.setAction(Long.toString(System.currentTimeMillis()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, 123456, intent, 0);
AlarmManager alarmManager = (AlarmManager) this.context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {             
   alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, finalTime - 400, pendingIntent);
} else {
   alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalTime - 400, pendingIntent);
}

BroadcastReciever

setNextAlarm();
Log.d("RESULT", "fired");
Intent alarmIntent = new Intent(context, AlarmSoundService.class);
//        Log.d("extra", "alarmInfo: " + intent.getStringExtra("alarmInfo"));
alarmIntent.putExtra("alarmInfo", intent.getStringExtra("alarmInfo"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    context.startForegroundService(alarmIntent);
} else {
    context.startService(alarmIntent);
}

setNextAlarm () - это предыдущий код, который я предоставил и который устанавливает будильник для будущей задачи.

...