Intent extra 在广播 PendingIntent 和 AlarmManager.setAlarmClock() 时丢失

Intent extras are lost with a broadcast PendingIntent and AlarmManager.setAlarmClock()

我创建了一个 PendingIntent 这样的:

Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction("Foobar");
intent.putExtra(EXTRA_ALARM, alarm);
intent.putExtra(EXTRA_TRYTWO, tryTwo);
intent.putExtra(EXTRA_BEGAN_TIME, beganTime);

return PendingIntent.getBroadcast(
        context, (int) alarm.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT
);

alarm 变量是 Parcelable。我这样安排 PendingIntent

PendingIntent alarmModifyPendingIntent = PendingIntent.getActivity(
        context, 0, editIntent, PendingIntent.FLAG_CANCEL_CURRENT
);

am.setAlarmClock(
    new AlarmManager.AlarmClockInfo(time, alarmModifyPendingIntent), pendingIntent
);

其中创建变量pendingIntent如上所示。

AlarmReceiver 对象在正确的时间在 onReceive 中接收到 Intent。但是,这个 Intent 不包含我设置的额外内容。例如intent.getParcelableExtra(EXTRA_ALARM) returns null.

这个问题至少出现在 Android 7.0(API 24 级),使用 LG G5。

使用 FLAG_CANCEL_CURRENTFLAG_ONE_SHOT 也不起作用。

The alarm variable is a Parcelable.

It is not safe to put a custom Parcelable in an Intent that is delivered to another process。 Android 7.0.

上的 AlarmManager 尤其如此

您需要将 Parcelable 替换为其他内容,例如 byte[],其中 you manually convert your Parcelable to/from that byte[].