关于运行时权限的申请

Android 6.0 之后,对于一些危险权限,应用只是在配置文件中申请权限是不可以执行危险操作的,要执行这些危险操作,都必须进行运行时权限处理。
运行时权限就是在程序需要使用危险权限时,由用户授权给予应用去执行某些危险操作
具体操作:
1>判断是否已经获得权限:
        使用 ContextCompatcheckSelfPermission() 方法,需要传入两个参数:
        第一个是 Context
         第二个是当前需要申请的权限名
        然后这个方法有返回值,和 PackageManager.PEMISSION_GRANTED 作比较, 如果相等则说明获得权限,如果不相等则说明用户没有授权
int code=ContextCompat.checkSelfPermission(this,"android.permission.READ_CONTACTS");
        if(code== PackageManager.PERMISSION_GRANTED){
	    //操作代码
            Intent intent=new Intent(this,NumActivity.class);
            startActivity(intent);
        }else{
	    //调用ActivityCompat.requestPermissions()方法申请运行时权限
            ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_CONTACTS"},1);
        }
如果已经获得权限,则直接可以执行相关操作
        如果没有获得权限,则进入 2>
 2>获取运行时权限:
            调用 ActivityCompat.requestPermissions() 方法申请运行时权限 ,需要传入三个参数
             第一个是Context
             第二个是当前需要申请的权限名
            第三个是请求码,确保唯一值就行
    //调用ActivityCompat.requestPermissions()方法申请运行时权限
    ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_CONTACTS"},1);

3>返回授权结果:
        调用完 ActivityCompat.requestPermissions() 方法后无论是什么结果都会返回 onRequestPermissionsResult() 方法,而且授权结果会打包在 grantResults 参数当中,现在只需要判断授权结果,做相应处理就行了
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){//判断返回码是否与申请码相同
            case 1:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
		    //执行操作
                    Intent intent=new Intent(this,NumActivity.class);
                    startActivity(intent);
                }
                break;
            default:
        }
    }

猜你喜欢

转载自blog.csdn.net/pulis_sl/article/details/80205486