我像这样创建一个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
对象在正确的时间收到Intent
中的onReceive
。但是,此Intent
不包含我设置的额外内容。例如,intent.getParcelableExtra(EXTRA_ALARM)
会返回null
。
Android 7.0(API级别24)至少使用LG G5会出现此问题。
使用FLAG_CANCEL_CURRENT
或FLAG_ONE_SHOT
也不起作用。
答案 0 :(得分:8)
警报变量是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[]
。