最近在做一个闹钟app时发现,利用pendingIntent 传递Parcelable对象,在broadcast里面无法获取到对应的Parcelable对象。

//发送pengingIntent  Intent intent = new Intent(context, AlarmClockBroadcast.class);  intent.putExtra(AlarmClockCommon.ALARM_CLOCK, alarmClock);   PendingIntent pi = PendingIntent.getBroadcast(context,                alarmClock.getId(), intent,                PendingIntent.FLAG_UPDATE_CURRENT);        AlarmManager alarmManager = (AlarmManager) context                .getSystemService(Context.ALARM_SERVICE);        // 取得下次响铃时间        long nextTime = calculateNextTime(alarmClock.getHour(),                alarmClock.getMinute(), alarmClock.getWeeks());        // 设置闹钟        // 当前版本为194.4)或以上使用精准闹钟        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            alarmManager.setExact(AlarmManager.RTC_WAKEUP, nextTime, pi);        } else {            alarmManager.set(AlarmManager.RTC_WAKEUP, nextTime, pi);        }
//广播接收AlarmClock alarmClock = intent                .getParcelableExtra(WeacConstants.ALARM_CLOCK);                这里获取到的alarmClock对象为空

原因是在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 toParcelable(byte[] bytes,                                     Parcelable.Creator creator) {        Parcel parcel=Parcel.obtain();        parcel.unmarshall(bytes, 0, bytes.length);        parcel.setDataPosition(0);        T result=creator.createFromParcel(parcel);        parcel.recycle();        return(result);    }}

通过将Parcelable对象先转化成byte数组传递,然后在broadcast中获取到这个byte数组,再将其转化成Parcelable对象

更多相关文章

  1. pull解析和json编码
  2. Android微信分享---点击分享伤害了我且一闪而过~
  3. Android面试题目(10) 内存泄露
  4. Android(安卓)tips3
  5. 改变分隔条,基于数组的ListView
  6. Android按钮设置文字变色
  7. Android的GridView和ScrollView的嵌套
  8. android之数组排序
  9. android animator

随机推荐

  1. Android(安卓)React Native组件的生命周
  2. Android10 insmod源码分析
  3. AIDL使用入门
  4. 在mac上无法使用Android(安卓)Studio的解
  5. Android对View进行截图并保存到本地相册
  6. 众多Android(安卓)开源项目推荐,给力工作
  7. Android开发:APP引导页启动页小Demo(实例)
  8. Android事件分发机制以及滑动冲突处理
  9. 2011年,移动互联网加速蔓延 – 来自2011移
  10. Andorid Studio NDK开发-编译OpenSSL类库