远程进程中的广播接收器

时间:2013-08-29 15:31:50

标签: android broadcastreceiver

我的应用程序具有设置提醒的功能。我正在创建这样的提醒

           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);
}

我正在传递可序列化对象,以便 - 当用户点击提醒通知时 - 我可以使用该对象加载我的活动。 但是,每当闹钟触发时,我都会收到类似“填写额外内容失败”的错误。

任何人都可以指出我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

我也有这个问题,收到了广播,但它总是有一个“填写额外内容失败”的警告。

解决方案是将Parcelable包装在Bundle中,并将Bundle添加为PendingIntent的额外内容。

问题在于,当执行PendingIntent时,它需要将intent extras复制到另一个intent,但要复制它所需要的parcelables再次包裹和包裹,在unparcel上它使用默认的ClassLoader而不是你的类ClassLoader,所以它没有找到要取消的类。但是如果你包装一个Bundle,它会将整个Bundle复制到intent中,并且不会完成任何无组合。