【发布时间】:2017-03-07 19:50:28
【问题描述】:
我正在为一个事件安排 2 个警报。第一个在前一小时,第二个在事件时间。 它适用于 Android M 及更低版本。 在 Android N 中,Bundle(extras) 为空。
这就是我创建意图的方式
public static Intent createEventIntent(final Context context, final Event event) {
final Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra(EXTRA_ALARM_TYPE, EXTRA_EVENT_TYPE);
intent.putExtra(EXTRA_EVENT, event);
return intent;
}
事件实现可序列化。
然后,我创建一个待处理的 Intent
final int broadCastId = event.hashCode();
final int broadCastId2 = broadCastId - 1; //to ensure 2 alarms
final PendingIntent alarmIntent =
PendingIntent.getBroadcast(mContext, broadCastId, intent, FLAG_UPDATE_CURRENT);
final PendingIntent alarmIntentOneHourBefore =
PendingIntent.getBroadcast(mContext, broadCastId2, intent, FLAG_UPDATE_CURRENT);
然后我安排闹钟:
mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
...
mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendarOneHourBefore.getTimeInMillis(),
alarmIntentOneHourBefore);
在onReceive方法中,extra为null:
@Override
public void onReceive(final Context context, final Intent intent) {
final String type = intent.getStringExtra(EXTRA_ALARM_TYPE); // null in 7.0
}
这仅在 Android N 中发生。
我错过了什么?
我试过了:
事件实现parcelable,然后发送一个parcelable。
创建一个捆绑包并将附加功能添加到捆绑包中。
设置和意图操作。
【问题讨论】:
标签: android android-intent alarmmanager android-7.0-nougat