【问题标题】:AlarmManager sends intent with empty Bundle in Android NAlarmManager 在 Android N 中发送带有空 Bundle 的意图
【发布时间】: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


    【解决方案1】:

    我记得在AlarmManagerIntents 中看到了一些关于加强使用自定义Parcelable 对象的限制。我现在找不到参考。你应该想办法重新架构你的应用,这样你就不会向AlarmManager发送自定义Parcelable

    您可以将自定义 Parcelable 序列化为简单的 Stringbyte[] 并将其放入 Intent 中,这应该可以解决您的问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多