首页 > 解决方案 > Android 8 中 BroadcastReceiver 中的 Intenet 为 null

问题描述

AlarmManager我有工作代码可以使用和启动计划任务 n 秒BrodcastReceiver

当我SetAlarmdelayTimeInMs秒后调用方法时,我需要从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) onReceive name上我尝试使用虚拟字符串甚至int,但我仍然得到null

能告诉我为什么这不起作用吗?请建议我的示例的工作代码。

谢谢

标签: androidbroadcastreceiveralarmmanager

解决方案


Android O 改变了他们处理服务调用和广播的方式。你不能再用AlarmManager这个了。糟透了,我知道,但我个人认为它更好。

展望未来,对于 Android <=> O,您将不得不使用JobScheduler.

这是一个很好的例子。

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


推荐阅读