美文网首页
用checkCallingOrSelfPermission代替c

用checkCallingOrSelfPermission代替c

作者: 愛與誠 | 来源:发表于2020-09-08 17:47 被阅读0次

    之前在项目中遇到了一个问题,系统内置安装后,WRITE_EXTERNAL_STORAGE没有系统弹窗,但回调中权限检查不过,同时用户自行设置也无效。
    使用checkSelfPermission检查WRITE_EXTERNAL_STORAGE结果为true,但activity的onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)回调中grantResults对应的结果为PackageManager.PERMISSION_DENIED
    普通安装则没有这个问题。为什么呢?

    我的尝试:
    1.WRITE_EXTERNAL_STORAGE改为READ_EXTERNAL_STORAGE。推测前者被ROM授予了权限,同时也将用户对权限的操作作废了。但是如果请求同组的READ_EXTERNAL_STORAGE,则存储权限弹窗能露出,问题解决
    2.使用checkCallingOrSelfPermission。看源码就知道,checkCallingOrSelfPermission和checkSelfPermission差别就在于参数列表:

    image.png
    image.png
    可以看出,前者使用当前应用的进程和线程:Process.myPid(), Process.myUid()
    后者使用Binder.getCallingPid(),Binder.getCallingUid(),即多进程通信中的信息,从注释中也包括一些高级的系统服务
    image.png
    所以,使用checkCallingOrSelfPermission做权限检查更合适。

    相关文章

      网友评论

          本文标题:用checkCallingOrSelfPermission代替c

          本文链接:https://www.haomeiwen.com/subject/tudjektx.html