美文网首页
用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

    之前在项目中遇到了一个问题,系统内置安装后,WRITE_EXTERNAL_STORAGE没有系统弹窗,但回调中权限...

  • 呼吸

    (爱用A代替,呼吸用B代替,你用C代替) A=B 爱如呼吸, -A=-B 没有爱就不能呼吸; C=A 你是我的爱,...

  • 关于MVVM和Protocol的想法

    背景介绍 用Swift代替Object-C 用protocol代替基类 用MVVM给ViewController减...

  • Mac新电脑安装记录

    0、从windows换到Mac的变化 用 command+C 代替 ctrl+C, command+V...

  • 关于 Objective-C 和 C 语言的一些事

    Objective-C概述 1.Objective-C 简称为Obj-C/OC (下文为了省事,直接用OC代替)。...

  • 做有意义的事

    用读书代替游戏, 用读报再去上网, 用欣赏电影代替看电视, 用思考代替发呆, 用对话代替发牢骚, 用快走或慢走代替...

  • 人际关系黄金法则

    1、用改善代替抱怨; 2、用建设代替批评; 3、用宽恕代替责备; 4、用教育代替压力。 5、用爱心换来感情; 6、...

  • 代替

    温柔用热水代替, 爱用枕头代替, 牵手用钢笔代替, 余生用此时代替, 你用世界代替。

  • 网易问题总结

    1. C++语言问题 1. Java用接口代替C++中多继承,有什么优势? 避免像C++那样出现多继承而导致的关系...

  • 【快速阅读128/200】《不急不乱轻松养育多孩》

    【快速阅读128/200】《不急不乱轻松养育多孩》用看见代替比较,用鼓励代替刺激,用合作代替竞争,用信任代替公平,...

网友评论

      本文标题:用checkCallingOrSelfPermission代替c

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