首页 > 解决方案 > WakefulBroadcastReceiver 不适用于 Nougat 和 Oreo 设备

问题描述

我有一个使用警报管理器设置警报的警报应用程序。一旦警报响起,接收器就会接收到它,该接收器启动唤醒服务,该服务处理警报并允许用户停止或打盹警报。

下面是代码片段

public class AlarmReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, final Intent intent) {
        Alarm alarm = intent.getParcelableExtra(Constants.ARGS_ALARM);
    }
}

我在旧版本的 Android 中得到了正确的值,但在 Nougat 和 Oreo 上得到了 null 的警报。我的应用支持 minSdkVersion 17 的 Nougat。

这段代码可能有什么问题?

标签: androidalarmmanager

解决方案


从这篇博客文章中引用我自己的话:

使用自定义Parcelable对象的代码AlarmManager可能适用于旧版本的 Android将无法在 Android N 上运行

Matthias Urhahn 指出 [a] 解决方法:将 转换Parcelable为您byte[]自己,将其存储在Bundle. 然后,操作系统进程会将其视为一些随机byte[]的。这个 Stack Overflow 答案 展示了这项技术。

这个示例项目也说明了这种技术。


推荐阅读