ClassNotFoundException при использовании пользовательских Parcelable

Я использую пользовательский Parcelable для переноса некоторых данных в BroadcastReceiver. Вот что я делаю:

Я регистрирую свое намерение и устанавливаю дополнительный Parcelable на нем вместе с дополнительным загрузчиком классов (intent.setExtraClassLoader (..)). Затем я планирую выполнение трансляции через AlarmManager.

Поэтому, когда срабатывает AlarmManager, он смотрит на мое намерение с его посылкой, которую он не может обработать, поскольку он не использует поставляемый загрузчик классов (как он швы).

Я думаю, что загрузчик классов теряется, когда Inten.fillIn копирует намерение в новый (см. Трассировку стека).

02-21 21:09:25.214: WARN/Intent(52): android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.company.project.MyParcelable 02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readParcelable(Parcel.java:1822) 02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readValue(Parcel.java:1713) 02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readMapInternal(Parcel.java:1947) 02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.unparcel(Bundle.java:169) 02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.putAll(Bundle.java:242) 02-21 21:09:25.214: WARN/Intent(52): at android.content.Intent.fillIn(Intent.java:4530) 02-21 21:09:25.214: WARN/Intent(52): at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:185) 02-21 21:09:25.214: WARN/Intent(52): at android.app.PendingIntent.send(PendingIntent.java:400) 02-21 21:09:25.214: WARN/Intent(52): at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:636) 

Так есть ли какой-то путь вокруг этой проблемы? Любая помощь будет оценена по достоинству.

благодаря

Поместите com.company.project.MyParcelable в фактическое приложение, вместо того, чтобы делать все игры, которые вы играете с загрузчиками классов. Затем он должен быть доступен как от отправителя, так и от получателя Intent .

Кажется, вы столкнулись с проблемой, описанной здесь: https://code.google.com/p/android/issues/detail?id=6822

Существует обходное решение, описанное в одном из комментариев по этой ссылке: Parcelable свой пользовательский Parcelable в дополнительный Bundle . Из-за того, что внутренняя часть Bundle не трогается до тех пор, пока это не будет необходимо, такое Intent может быть доставлено в ваше приложение, так как никто не попытается развязать ваш класс за пределами вашего приложения.

  Bundle hackBundle = new Bundle(); hackBundle.put("key", myParcelable); intent.putExtra("bundleKey", hackBundle); 

В Android также есть ошибка, которая может объяснить эту проблему, если вы попытаетесь передать намерение другому намерению: https://code.google.com/p/android/issues/detail?id=179480&thanks=179480&ts=1436464704