Mat*_*ell 3 android android-intent android-alarms android-pendingintent android-broadcast
我创建了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
);
Run Code Online (Sandbox Code Playgroud)
该alarm变量是一个Parcelable.我这样安排PendingIntent:
PendingIntent alarmModifyPendingIntent = PendingIntent.getActivity(
context, 0, editIntent, PendingIntent.FLAG_CANCEL_CURRENT
);
am.setAlarmClock(
new AlarmManager.AlarmClockInfo(time, alarmModifyPendingIntent), pendingIntent
);
Run Code Online (Sandbox Code Playgroud)
pendingIntent如上所示创建变量的位置.
的AlarmReceiver对象接收Intent在onReceive在正确的时间.但是,这Intent不包含我设置的额外内容.例如intent.getParcelableExtra(EXTRA_ALARM)返回null.
Android 7.0(API级别24)至少使用LG G5会出现此问题.
使用FLAG_CANCEL_CURRENT或FLAG_ONE_SHOT不工作.
警报变量是Parcelable.
将自定义Parcelable放入Intent传递给另一个进程的自定义是不安全的.AlarmManager在Android 7.0上尤其如此.
您需要将其替换Parcelable为其他内容,例如a byte[],您手动将其转换Parcelable为/从该转换byte[].