博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决调试Alarm源码时出现BadParcelableException异常
阅读量:5246 次
发布时间:2019-06-14

本文共 1031 字,大约阅读时间需要 3 分钟。

最近看4.0的DeskClock源码,看了几天以后想使用它的源码写一个定时开启飞行模式的程序,歇了两天最后运行程序的时候发现,当执行updateNotification()方法的时候程序报了android.os.BadParcelableException: ClassNotFoundException when unmarshalling : com....的异常。看了很多帖子,都不能解决我的问题,源码中Alarm.java实现了Parcelable接口,代码绝对不会写错的,而且我也去API文档中确认没有写错。

最后发现,Logcat中的出错信息中没有我定义的包名,双击错误信息却跳到了程序的AlarmReceiver.java中,这说明系统认为是我的AlarmReceiver.java在unmarshall Alarm对象的时候出错了。

在AndroidManifest.xml中AlarmReceiver的IntentFilter定义是:

<intent-filter>

<action android:name="com.android.deskclock.ALARM_ALERT" />
<action android:name="alarm_killed" />
</intent-filter>

而<action android:name="alarm_killed" />这个action同样会触发系统中的Clock程序,因为系统的Clock程序的AlarmReceiver同样可以接受这个Action。因此,我们只需要改一下这一个intent-filter就行,比如改为:

<intent-filter>

<action android:name="com.lefter.alarm.ALARM_ALERT" />
<action android:name="com.lefter.alarm.ALARM_KILLED" />

</intent-filter>

发送Intent的时候Action定义为"com.lefter.alarm.ALARM_KILLED",这样的话,就只有我们自己的AlarmReceiver可以对这个Action进行处理了。从而避免了系统的Clock与我们的程序产生冲突了。

转载于:https://www.cnblogs.com/Lefter/archive/2012/08/15/2640634.html

你可能感兴趣的文章
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>