Intenet в broadcastreceiver имеет значение null в android 8

У меня есть рабочий код для запуска задачи расписания на n секунд с использованием AlarmManager и BrodcastReceiver

Когда я вызываю SetAlarm после секундного метода delayTimeInMs, мне нужно получить новое уведомление от BrodcastReceiver.

public void SetAlarm(Context context, int delayTimeInMs){

    AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    intent.putExtra("name", name);

    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent,  PendingIntent.FLAG_CANCEL_CURRENT);

    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + delayTimeInMs, pi);
}

Вот класс BrodcastReceiver

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent) {

        String name = intent.getStringExtra("name");
       showNotification(name);
   }
}

Вот декларация манифеста

        <receiver android:name="com.flexsolution.faketextmessage.AlarmReceiver" />

SetAlarm метод работает нормально BrodcastReceiver вызывается через X секунд, но моя проблема в Android 8 (oreo) onReceivename имеет значение null Я пытаюсь использовать фиктивную строку даже int, и все же я получаю null

Можете сказать мне, почему это не работает? И, пожалуйста, предложите мне рабочий код моего примера.

Спасибо

отправить уведомление .... как push-уведомление?

letsCode 10.08.2018 15:30

да, но это не проблема, проблема в том, что я onReseive получает null в параметре намерения

Jovan 10.08.2018 15:36

он отправляет нуль?

letsCode 10.08.2018 15:37
0
3
25
1

Ответы 1

Android O изменил способ обработки служебных вызовов и трансляций. Вы НЕ можете больше использовать AlarmManager для этого. Отстой, я знаю, но лично я считаю, что так лучше.

В дальнейшем для Android <=> O вам придется использовать JobScheduler.

Вот отличный тому пример.

https://blog.klinkerapps.com/android-o-background-services/

Другие вопросы по теме