【发布时间】:2017-01-21 13:12:40
【问题描述】:
这就是问题所在。我的程序在 Android 6.0 中运行完美。将设备更新到 android 7.0 后。 Pendingintent 不能将 Parcelable 数据传递给 boradcast reveiver。这是代码。
报警
public static void setAlarm(@NonNull Context context, @NonNull Todo todo) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("KEY_TODO", todo);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, todo.remindDate.getTime(), alarmIntent);
}
Todo 是一个 Parcelable 类,而 todo 是我在通知中需要的实例。
在 Broadcastreceiver 中,我无法获取 Parcelable 数据。
public void onReceive(Context context, Intent intent) {
Todo todo = intent.getParcelableExtra("KEY_TODO");
}
这是我调试时的意图结果
我不知道为什么意图只包含一个我从未放入过的整数。 Parcelable 待办事项在哪里。 此代码在android 6.0下没有问题,但在7.0下无法运行
【问题讨论】:
-
在将
Todo对象添加到“附加”之前,您是否尝试过将其包装在Bundle中?这通常在将自定义Parcelable对象传递给AlarmManager时有效(但现在可能在 Android 7 中被破坏)。我会对你的发现感兴趣。 -
添加额外内容:
Bundle bundle = new Bundle; bundle.putParcelable("todo", todo); intent.putExtra("KEY_TODO", bundle);。提取额外:Bundle bundle = intent.getBundleExtra("KEY_TODO"); if (bundle != null) { Todo todo = bundle.getParcelableExtra("todo"); }
标签: android android-intent broadcast android-pendingintent parcelable