Сценарий:
У меня запланирован запуск будильника в указанное время. Каждый раз, когда выполняется мой BroadCastReceiver срабатывает.
В BroadCastReceiver я делаю все виды проверок, и в итоге получается ArrayList класса Notify
Я отображаю Уведомление в строке состояния
Когда пользователь нажимает на Уведомление, я отображаю Активность. Мне нужно в своей Деятельности, ArrayList, чтобы отобразить его на представлениях.
Вот пример кода:
public class ReceiverAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<Notify> notifications = new ArrayList<Notify>();
//do the checks, for exemplification I add these values
notifications.add(new Notify("id1","This is very important"));
notifications.add(new Notify("id2","This is not so important"));
notifications.add(new Notify("id3","This is way too mimportant"));
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//init some values from notificationManager
Intent intentNotif = new Intent(context, NotificationViewer.class);
intentNotif.putParcelableArrayListExtra("list", notifications);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intentNotif, 0);
Notification notification = new Notification(icon, text, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(NOTIFICATION_ID, notification);
}
И
public class NotificationViewer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notification_viewer);
ArrayList<Notify> testArrayList = null;
Bundle b = getIntent().getExtras();
if (b != null) {
testArrayList = b.getParcelableArrayList("list");
}
}
И
public class Notify implements Parcelable {
public Notify(Parcel in) {
readFromParcel(in);
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Notify createFromParcel(Parcel in) {
return new Notify(in);
}
public Notify[] newArray(int size) {
return new Notify[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(text);
}
private void readFromParcel(Parcel in) {
id = in.readString();
text = in.readString();
}
public Notify(String id, String text) {
super();
this.id = id;
this.text = text;
}
/** The id. */
public String id;
/** Notification text to be displayed. */
public String text;
@Override
public int describeContents() {
return 0;
}
}
On testArrayList = b.getParcelableArrayList ("list"); Из NotificatioNActivity я получаю эту ошибку:
E/AndroidRuntime(14319): java.lang.RuntimeException: Unable to start activity
ComponentInfo {NotificationViewer}: java.lang.RuntimeException: Parcel
android.os.Parcel@4050f960: Unmarshalling неизвестный код типа 7602277 в
смещение 124
Как вы видите, из цитат из SO я говорю, что мне нужно было сделать мой объект Parcelable. Может, я что-то там не так сделал, но ... я не знаю, как это исправить. Что я делаю не так?