API23以上的运行时权限


Android学习整理 - 系列


Android的权限机制从第一个版本就有了,一些软件,不管用不用的到这些权限,都先申请了再说。比如某企鹅,安装软件时可以看到它要了读取和发送信息的权限,嘿嘿嘿,话说要这权限干嘛,。。。。
然后Android针对这些问题,在Android 6.0(API23)时安卓加入了运行时权限,从而更好的保护了用户的隐私安全。

  • 就是用户不需要再安装软件的的时候一次性授权所有的权限,而是在软件使用过程中针对某一些权限进行申请,当然,一般情况下,拒绝权限不会退出程序(万恶的某博,不给手机通讯录打电话权限就退出),而是可以用别的功能。

  • 并不是所有的权限都要在运行时申请,这样得多麻烦。Android将权限分为了两类,1 普通权限,2 危险权限

普通权限就是说不会直接威胁到用户的安全和隐私。这些权限系统会自动授权,只要你声明了。
危险权限就是涉及用户隐私的。这些就要运行时动态申请了

普通权限和危险权限

  • Android系统有上百种权限,危险权限如下表,其他的就是普通权限了
危险权限和权限组

需要注意的是
表格中每个权限都属于一个权限组,要是申请了权限组的一个权限,那么该权限组的所有权限都会同时被授权。比如,申请了WRITE_EXTERNAL_STORAGE这个权限,那么和它在同一权限组的READ_EXTERNAL_STORAGE也会同时被授权!

不在这张表的权限可以直接在manifest文件里声明就行了(API23以上),不过平时为了兼容低版本,任何权限都要声明在manifest文件里,然后在Activity中针对API23以上申请运行时权限

动态申请运行时权限

一般情况下,比如,申请读写内存卡权限
Manifest.permission.WRITE_EXTERNAL_STORAGE

在Activity的onCreate里

 //判断权限够不够,不够就给
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            }, 1);
        } else {
            //权限够了这里处理逻辑
            Log.d(TAG, "权限够了");
        }

Activity里加上回调,控制权限申请窗口弹出来的的逻辑

//获取到权限回调方法
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[]permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //权限够了处理逻辑
                    Log.d(TAG, "权限够了,逻辑");
                } else {
                    Toast.makeText(this, "权限不够,程序将退出", Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
                break;
        }
    }

声明权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后运行,点击拒绝就直接finish()了

Gradle集成

推荐的开源库:
PermissionsDispatcher

中文版本: PermissionsDispatcher使用详解

使用:
使用PermissionsDispatcher轻松解决Android权限问题

另一种思路:
Android 6.0运行时权限简析及最佳实践


参考

系统权限

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,498评论 25 709
  • 发热放入Android6.0带来了新的权限管理方式,根据提供的官方文档,再加上自己的理解,做了以下汇总仅供大家伙参...
    PapiAP阅读 5,733评论 0 6
  • <manifest> 首先,我们的根标签就是 manifest,有开始标签就有结束标签,所以每个标签都是成对出现的...
    IT_xiao小巫阅读 4,355评论 0 2
  • 刚刚收到室友发来的消息:“班里学生证都盖完章了,我的还没交……”然后配上了几个苦笑的表情,隔着屏幕,我都能感受到她...
    简言之ii阅读 4,999评论 0 0
  • 作为北方人,我没见过 蚕吃桑叶的情景。据说 悄无声息又,沙沙作响 我对蚕食的完美演绎,完全 凭借想象,好比时光之于...
    细雨烟岚阅读 3,184评论 0 0

友情链接更多精彩内容