2016-10-25 22 views
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。

  • 創建一個包並將其添加到包中。

  • 設置和意圖操作。

回答

0

我記得看到一些關於緊縮政策對使用自定義的AlarmManagerIntent小號Parcelable對象的限制。我現在找不到參考。您應該找出重新構建應用程序的方法,以便您不會將自定義Parcelable發送到AlarmManager

可序列化自定義Parcelable一個簡單Stringbyte[]並放進了Intent和應該解決您的問題。

+0

下面是如何做到這一點的示例:https://gist.github.com/jacklt/6711967我沒有檢查代碼,看看它是否有效,但你應該得到的基本想法。 –

相關問題