Android6.0 运行时权限

时间:2019-01-23
本文章向大家介绍Android6.0 运行时权限,主要包括Android6.0 运行时权限使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在Android的上百多种权限里,普通权限不用记,只需要记住危险权限;危险权限一共9组24个:

这里做一个打电话的demo:
1:点击按钮判断用户是否授权:

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
                }else {
                    call();
                }

            }
        });

检查权限 是用的ContextCompat.checkSelfPermission()方法,它接收两个参数,一参:context,二参:具体的权限名,得到的返回值与PackageManager.PERMISSION_GRANTED作比较,如果想等就说明已经授权;

反之不相等,需要通过ActivityCompat.requestPermissions()方法来申请权限,它接收三个参数,一参:context; 二参:string数组 把我们需要申请的权限名放里边,可以放多个;三参:传入唯一的请求码(与onRequestPermissionsResult的第一个参数相对应);

ActivityCompat.requestPermissions()方法会弹出一个对话框,无论用户选择确定和拒绝都会回调下面的onRequestPermissionsResult()方法:

 @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){
                    call();
                }else {
                    Toast.makeText(this, "You denied the permission!", Toast.LENGTH_SHORT).show();
                }
        }

    }

onRequestPermissionsResult()方法
一参:是与ActivityCompat.requestPermissions()方法的第三个参数相对应的唯一请求码;
二参:权限名数组
三参:封装 授权的结果

下面是Call()方法的具体代码:

 private void call() {
        try {
            Intent intent=new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }catch (SecurityException e){
            e.printStackTrace();
        }
    }

这样就完成了!在6.0及以上的android手机上运行此程序,点击按钮会触发权限,同意便会拨打电话,拒绝也不会影响程序运行。