Permission Denial: requires android.permission.INTERACT_ACROSS_USERS_FULL

今天在开发调试时,出现了奇怪的crash情况,在华为手机和google手机上会出现,在其他手机上却不会出现,报错日志如下:

Caused by: java.lang.SecurityException: Permission Denial: checkClipboardServiceCallingUser from XXXXX asks to run as user 2857214 but is calling from uid u0a327; this requires android.permission.INTERACT_ACROSS_USERS_FULL
        at android.os.Parcel.createException(Parcel.java:2071)
        at android.os.Parcel.readException(Parcel.java:2039)
        at android.os.Parcel.readException(Parcel.java:1987)

看报错描述似乎与安卓的多用户管理有关系,缺少相关权限,于是那就加上权限:

<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/>

然后加上权限并没有用,上网一顿查找之后,发现了一些奇怪的操作,抱着试试的心态,竟然解决了crash,简直不敢相信。
crash的原因竟然是:在自定义的Application中定义了一个名为getUserId()的方法,与手机系统中的方法重名。

public class Application extends ContextWrapper implements ComponentCallbacks2
@Override
    public int getUserId() {
        return mBase.getUserId();
    }

Application继承自ContextWrapper,而ContextWrapper中存在一个名为getUserId()的方法。
解决了这个方法重命名的问题,crash就不攻自破了。

猜你喜欢

转载自blog.csdn.net/yuantian_shenhai/article/details/124257955