イベントに対して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実装しています。
バンドルを作成し、バンドルに追加します。
アクションの設定と実行。
これを行う方法の例は次のとおりです。https://gist.github.com/jacklt/6711967そのコードが動作しているかどうかは確認していませんが、基本的な考え方を理解する必要があります。 –