bug修复系列之Can't use FLAG_RECEIVER_BOOT_UPGRADE here

一、前言

博主决定,在接下来的开发工作中,遇到bug麻烦,在解决之后都会写一篇博文来进行总结,虽然琐碎,但是我愿意不厌其烦的记录下来,不为别的,就为了能够使自己有所收获,当然最好也能够帮助后来人迅速的解决类似的问题。

我现在的项目是从离职的同事接手过来的,项目框架和代码细节都没怎么理清,昨天测试的同事发现了一个bug,然后让我进行修复。当时我没有仔细研究bug就跟他说了我的各种“猜测”,现在回想起来让我有些后悔.....在遇到问题的时候先别找各种理由,应该先研究再跟他人讲,要不然就是态度的问题。

还有,就是解决问题的思路,一定要从bug处开始,顺藤摸瓜,并对症下药的把问题一步步的解决了,不要胡乱的猜测,这样只会浪费时间。下面进入正题:


二、bug内容及原因

java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2963)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1703)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:391)
at com.mozillaonline.providers.downloads.DownloadService$UpdateThread.run(DownloadService.java:289)

出现bug的原因是,在发送广播时不要给Intent设置任何的FLAG_ACTIVITY_相关的flag


三、延伸

(一)Intent 添加FLAG的作用

在Intent中addFlags()的作用是起到控制Activity栈的作用,有点类似于Activity的启动模式,如FLAG_ACTIVITY_SINGLE_TOP相当于加载模式中的singleTop

(二)android:exported="false"的作用

是否允许该组件(如Activity、Service、BroadcastReceiver、ContentProvider)被其它应用程序调用。

(三)long转int:int mInt = (int)mLong;  (够二的偷笑

DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION错误描述了两种情况:Exported receiver does not require permission和Exported service does not require permission。下面是对这两种情况的介绍和解决方法: 1. Exported receiver does not require permission: 这种情况表示导出的接收器(receiver)不需要权限。在Android中,当你在AndroidManifest.xml文件中声明一个接收器时,你可以使用`android:permission`属性来指定接收器所需的权限。如果你没有指定该属性,那么接收器将不需要任何权限。如果你收到了"DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"错误,那么可能是因为你的接收器没有指定所需的权限。 解决方法: 你可以通过在接收器的声明中添加`android:permission`属性来指定所需的权限。例如,如果你的接收器需要`android.permission.RECEIVE_SMS`权限,你可以这样声明接收器: ```xml <receiver android:name=".MyReceiver" android:permission="android.permission.RECEIVE_SMS"> ... </receiver> ``` 2. Exported service does not require permission: 这种情况表示导出的服务(service)不需要权限。在Android中,当你在AndroidManifest.xml文件中声明一个服务时,你可以使用`android:permission`属性来指定服务所需的权限。如果你没有指定该属性,那么服务将不需要任何权限。如果你收到了"DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"错误,那么可能是因为你的服务没有指定所需的权限。 解决方法: 你可以通过在服务的声明中添加`android:permission`属性来指定所需的权限。例如,如果你的服务需要`android.permission.ACCESS_FINE_LOCATION`权限,你可以这样声明服务: ```xml <service android:name=".MyService" android:permission="android.permission.ACCESS_FINE_LOCATION"> ... </service> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值