AlarmManager срабатывает перед определенным временем, когда я перепланирую сигналы тревоги в onRecieve вещательного приемника. я не понимаю, почему это происходит? - PullRequest
0 голосов
/ 28 января 2020

Мое приложение должно вызывать тревогу в точное или почти точное время, поэтому я использую setExact и setAndAllowWhileIdle.

Теперь я попытался перенести эти тревоги в onRecieve вещательного приемника. Теперь будильник продолжает срабатывать каждые 2 секунды, даже если начальная транзакция для менеджера тревог составляет 16 минут.

** Включена инициализация AlarmManagerСоздание основной активности **

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        Intent intent = new Intent(getApplicationContext(), NotificationBroadcast.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), RQ_SYNC_SERVICE_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        long sixteenMinute = 60 * 1000 * 16;     

        if (Build.VERSION.SDK_INT < 19) {

            alarmManager.set(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
        } else if (19 <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT < 23) {

            alarmManager.setExact(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);
        } else if (Build.VERSION.SDK_INT >= 23) {

            alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,  sixteenMinute, pendingIntent);
        }

код onRecieve of вещательный приемник

@Override
   public void onReceive(Context context, Intent intent) {     

       //reset Alarm
       Log.d(TAG,"alarm reset");

       long sixteenMinute = 60 * 1000 * 16;
       AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
       Intent intent2 = new Intent(context, NotificationBroadcast.class);
       PendingIntent pendingIntent = PendingIntent.getBroadcast(context, RQ_SYNC_SERVICE_CODE, intent2, PendingIntent.FLAG_UPDATE_CURRENT);


       if (Build.VERSION.SDK_INT < 19) {

           alarmManager.set(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);

       } else if (19 <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT < 23) {

           alarmManager.setExact(AlarmManager.RTC_WAKEUP, sixteenMinute, pendingIntent);

       } else {

           alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,  sixteenMinute, pendingIntent);
       }
   }

logcat сигнал тревоги запускается каждые 2 секунды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...