最近在开发闹钟,需要通过pendingIntent.getBroadcast()传递数据,在broadcast里面获取到对应的Parcelable对象为null。
原因是6.0版本以上pendingIntent在这个过程中可能丢失了Parcelable对象 :
解决办法
public class Parcelables {
public static byte[] toByteArray(Parcelable parcelable) {
Parcel parcel=Parcel.obtain();
parcelable.writeToParcel(parcel, 0);
byte[] result=parcel.marshall();
parcel.recycle();
return(result);
}
public static <T> T toParcelable(byte[] bytes,
Parcelable.Creator<T> creator) {
Parcel parcel=Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
T result=creator.createFromParcel(parcel);
parcel.recycle();
return(result);
}
}
在Intent将Parcelable对象先转化成byte数组传递,然后在broadcast中获取到这个byte数组,再将其转化成Parcelable对象