zoukankan      html  css  js  c++  java
  • 解决调试Alarm源码时出现BadParcelableException异常

    最近看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与我们的程序产生冲突了。

  • 相关阅读:
    字节输入输出流
    数据库安全性
    数据库设计:三种范式
    (Java篇) 代理服务:Nginx ---》(1)介绍及安装
    (十七)微信小程序:全局优化
    (十六)微信小程序:电影详情页
    (十五)微信小程序:优化电影页面
    (十四)微信小程序:上拉加载 下拉刷新
    (十三)微信小程序:更多电影页面
    管理:会议纲要
  • 原文地址:https://www.cnblogs.com/Lefter/p/2640634.html
Copyright © 2011-2022 走看看