2
我正在爲事件安排2個鬧鐘。第一次在前一小時,第二次在事件時間。 它適用於Android M及更低版本。 在Android N中,Bundle(extras)爲空。AlarmManager在Android中發送帶有空Bundle的intent N
這是我如何創建一個意圖
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;
}
事件實現Serializable。
然後,我創建了一個未決的意圖
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,羣衆演員都是零:
@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。
創建一個包並將其添加到包中。
設置和意圖操作。
下面是如何做到這一點的示例:https://gist.github.com/jacklt/6711967我沒有檢查代碼,看看它是否有效,但你應該得到的基本想法。 –