• 解决调试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与我们的程序产生冲突了。

  • 相关阅读:
    android彻底结束进程的两种方法
    清理软件缓存
    android webview 设置
    创建和使用Android library工程
    如何使Android应用程序获得root权限
    自动安装mysql5.7shell脚本实现与ansible脚本实现
    老生常谈:Asp.net Mvc 3 加载cshtml文件创建自定义分页
    老生常谈: Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
    Razor API翻译
    Asp.net MVC 3使用 Area 小结
  • 原文地址:https://www.cnblogs.com/Lefter/p/2640634.html
Copyright © 2020-2023  润新知