我的应用程序具有设置提醒的功能。我正在创建这样的提醒
Intent intent = new Intent(Context,ReminderActivity.class);
intent.putExtra(ResolutionsListActivity.RESOLUTION_OBJECT, resolution);
PendingIntent sender = PendingIntent.getBroadcast(
ComposeResolutionActivity.this,intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
interval, sender);
分辨率---可序列化对象。
这里我的ReminderActivity类扩展了广播接收器。
我在接收器中声明了我的接收器
< receiver android:name="com.webileapps.resolutions.ReminderActivity"
android:process=":remote" />
在我的提醒性课程中,我正在捕捉已触发的警报并显示通知。
public class ReminderActivity extends BroadcastReceiver {
private static final String TAG = "ReminderActivity";
@Override
public void onReceive(Context context, Intent intent) {
// Toast.makeText(context, "Alarm set", Toast.LENGTH_SHORT).show();
Resolution resolution = (Resolution) intent
.getSerializableExtra(ResolutionsListActivity.RESOLUTION_OBJECT);
showNotification(context, resolution);
}
我正在传递可序列化对象,以便 - 当用户点击提醒通知时 - 我可以使用该对象加载我的活动。 但是,每当闹钟触发时,我都会收到类似“填写额外内容失败”的错误。
任何人都可以指出我做错了什么吗?
答案 0 :(得分:1)
我也有这个问题,收到了广播,但它总是有一个“填写额外内容失败”的警告。
解决方案是将Parcelable包装在Bundle中,并将Bundle添加为PendingIntent的额外内容。
问题在于,当执行PendingIntent时,它需要将intent extras复制到另一个intent,但要复制它所需要的parcelables再次包裹和包裹,在unparcel上它使用默认的ClassLoader而不是你的类ClassLoader,所以它没有找到要取消的类。但是如果你包装一个Bundle,它会将整个Bundle复制到intent中,并且不会完成任何无组合。