2016-10-25 4 views
2

イベントに対して2つのアラームをスケジュールしています。最初の1時間前と2番目のイベント時間です。 Android M以降で動作します。 Android Nでは、バンドル(エキストラ)は空になります。AlarmManagerは、Androidの空のバンドルでインテントを送信します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); 

を作成それから私はアラームスケジュール:方法onReceiveで

mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 
... 
mAlarmManager.set(AlarmManager.RTC_WAKEUP, calendarOneHourBefore.getTimeInMillis(), 
      alarmIntentOneHourBefore); 

を、エキストラが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実装しています。

  • バンドルを作成し、バンドルに追加します。

  • アクションの設定と実行。

答えて

0

私はAlarmManagerIntent秒でカスタムParcelableオブジェクトの使用に制限を締めについて何かを見て覚えています。私は今参照を見つけることができません。 AlarmManagerにカスタムParcelableを送信しないように、アプリケーションを再構築する方法を理解する必要があります。

あなたは、単純なStringまたはbyte[]にカスタムParcelableをシリアル化し、Intentにそれを入れて、それはあなたの問題を解決する必要がありますすることができます。

+0

これを行う方法の例は次のとおりです。https://gist.github.com/jacklt/6711967そのコードが動作しているかどうかは確認していませんが、基本的な考え方を理解する必要があります。 –

関連する問題