ContentProvider外部应用读取出错:(查了两天半的bug)

本文介绍了一个关于java.lang.SecurityException的问题,该问题是由于方法名冲突引起的。通过更改方法名,如将getUserId()改为getMyUserId(),成功解决了该异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打印:

java.lang.SecurityException: Permission Denial: reading com.dream.tutorsplanpush.LauncherContentProvider uri content://com.dream.tutorsplanpush.launchercontentprovider/launcher_msfdb/480770 from pid=30061, uid=10153 requires null, or grantUriPermission()

提示感觉是缺少权限,但是requires null,实际并不缺少任何权限。

原因:

1、Application中有getUserId()方法,会莫名其妙地被调用,导致出错,可以改个方法名即可,例如改为getMyUserId()就没事了。
2、方法在本人代码中确定没有调用,但是打印结果是被调用到,所以可能是一些第三方的框架之类的调用到。
3、推测有可能是极光推送或者Netroid下载里面有反射调用之类的引起。
4、虽然无法找到真正原因,但通过改方法名已经解决问题。

后续:

发现Context类中存在着getUserId方法,而Application间接继承Context,虽然还不清楚什么导致,不过可能跟这个有关系。

/**
     * Get the userId associated with this context
     * @return user id
     *
     * @hide
     */
    @TestApi
    public abstract @UserIdInt int getUserId();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值