菜鸟安卓学习路——简单的运行时权限问题

Android将现有的权限归成了两类,一类是普通权限,另一类是危险权限
访问https://www.cnblogs.com/plumlee/p/11284614.html查看Android系统中完整的权限列表


运行时权限的核心是由用户授权我们去执行某些危险操作

1,在AndroidManifest.xml文件中声明权限

如:

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

   //访问联系人权限
(如果是普通权限的话只需要这一步)

2,判断用户是否已经授权

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String []{Manifest.permission.READ_CONTACTS},1);
        }else {
            readContacts();
        }

 

利用ContextCompat.checkSelfPermission()方法:
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED
方法有俩参数:context,具体的权限名
如果没有,利用方法ActivityCompat.requestPermissions()向用户申请,该方法有三个参数:context,要申请的权限,请求码
(这里的请求码的作用跟以startActivityForResult中的如出一辙),返回的值(用户的选择)存入grantResult数组中
如果已经授权(granted)直接进行操作

3,重写onRequestPermissionsResult()方法

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode){
            case 1:
                if (grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    readContacts();
                }else {
                    Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

 

对ActivityCompat.requestPermissions()传入的请求码进行筛选,如果grantResult为允许,则进行接下来的操作
如果不允许,用Toast通知用户

 

posted @ 2019-08-01 18:53  希望25分钟跑完5公里  阅读(201)  评论(0编辑  收藏  举报