android - Android 8 中 BroadcastReceiver 中的 Intenet 为 null
问题描述
AlarmManager
我有工作代码可以使用和启动计划任务 n 秒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) onReceive
name
上我尝试使用虚拟字符串甚至int,但我仍然得到null
能告诉我为什么这不起作用吗?请建议我的示例的工作代码。
谢谢
解决方案
Android O 改变了他们处理服务调用和广播的方式。你不能再用AlarmManager
这个了。糟透了,我知道,但我个人认为它更好。
展望未来,对于 Android <=> O,您将不得不使用JobScheduler
.
这是一个很好的例子。
推荐阅读
- spring-boot - 微服务应用程序的 Gradle 独立父模块
- python - 元素/值的计数出现在列表列表中
- c# - C# 检查任务状态
- sql - 如何使用子查询在 Postgresql ltree 中获取后代?
- java - ARCORE 与 Camera2 API 共享相机时的图像捕获
- python - aiohttp 在 Python 对 API 的请求中对 http.client 有不同的响应
- sql - 用户重新激活的 SQL 查询
- python - 我如何修复我的维基百科表格 web-scraper - 不返回任何单元格值
- blazor-webassembly - 异常渲染组件
- javascript - $.each 循环中的 jQuery UI 自动完成不显示第一次迭代的结果