java - AlarmManager 在 Android 8.1.0 中不起作用
问题描述
我的要求设置Notification
为特定时间,例如用户生日或假期
我正在使用AlarmManager使用广播接收器来安排通知
代码工作正常6.0
(即使应用程序被杀死,从最近的列表中刷卡)但不能正常工作Android 8.1.0
(Mf:Oppo)
阅读了这个和这个以及许多答案,但没有找到任何有用的任何想法如何解决这个问题
这是我的代码
AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
//creating a new intent specifying the broadcast receiver\
Intent i = new Intent(this, HolidayBroadcast.class);
i.putExtra("eventName",islamicHoliday.getEventName());
i.putExtra("dateH", testTmp.getCalendar().getTimeInMillis());
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
//creating a pending intent using the intent
PendingIntent pi = PendingIntent.getBroadcast(this, new Random().nextInt(), i, PendingIntent.FLAG_UPDATE_CURRENT);
//setting alarm
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,getTimeInMillis(), pi);
}
else
{
am.setExact(AlarmManager.RTC_WAKEUP, getTimeInMillis(), pi);
}
解决方案
您可以使用链接中提到的 workmanager。它支持所有 api 版本并且易于使用,因为它向后兼容 API 级别 14
https://developer.android.com/topic/libraries/architecture/workmanager
https://medium.com/androiddevelopers/introducing-workmanager-2083bcfc4712
推荐阅读
- python - 使用 ortools 选择列表中最小的两个整数值
- api - 以“成功”状态结束的弹性搜索快照是否会丢失索引文档?
- xml - 恢复包含“<”和“>”的数据
- php - 从嵌套在 for 循环中的 if 条件返回 true 的函数
- reactjs - 在 React 中将 ByteArray 下载为 pdf /handle 错误
- angular - 使用 Angular 在 Highcharts 中显示来自 CSV 的数据
- grails - Grails distinct projection 获取不同项目的结果计数
- azure-application-insights - pageViews - 名称列(页面名称前的字母)
- jenkins-plugins - HTML 报告在 Jenkins 仪表板中不可见
- css - 使用类样式化 react-select