当前位置: 移动技术网 > 移动技术>移动开发>Android > android动态权限申请

android动态权限申请

2020年08月14日  | 移动技术网移动技术  | 我要评论
如代码所示:public class MainActivity extends AppCompatActivity { private String[] permissionList = new String[]{ //申请的权限列表 Manifest.permission.READ_CONTACTS, Manifest.permission.READ_EXTERNAL_STORAGE }; @Override

如代码所示:

public class MainActivity extends AppCompatActivity {

    private String[] permissionList = new String[]{    //申请的权限列表
            Manifest.permission.READ_CONTACTS,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addPermissByPermissionList(this,permissionList,1);


    }

    /**
     * 动态权限
     */
    public void addPermissByPermissionList(Activity activity, String[] permissions, int request) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {   //Android 6.0开始的动态权限,这里进行版本判断
            ArrayList<String> mPermissionList = new ArrayList<>();
            for (int i = 0; i < permissions.length; i++) {
                if (ContextCompat.checkSelfPermission(activity, permissions[i])
                        != PackageManager.PERMISSION_GRANTED) {
                    mPermissionList.add(permissions[i]);
                }
            }
            if (mPermissionList.isEmpty()) {  //非初次进入App且已授权
//                showContacts();
                Toast.makeText(this, "已授权", Toast.LENGTH_SHORT).show();
            } else {
                //请求权限方法
                String[] permissionsNew = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
                ActivityCompat.requestPermissions(activity, permissionsNew, request); //这个触发下面onRequestPermissionsResult这个回调
            }
        }
    }

    /**
     * requestPermissions的回调
     * 一个或多个权限请求结果回调
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean hasAllGranted = true;
        //判断是否拒绝  拒绝后要怎么处理 以及取消再次提示的处理
        if (requestCode == 1) {
            for (int grantResult : grantResults) {
                //grantResult 对应申请权限数组的单个权限是否申请回来的结果
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    hasAllGranted = false;
                    break;
                }
            }
            if (hasAllGranted) { //同意权限做的处理,开启服务提交通讯录
//            showContacts();
                Toast.makeText(this, "同意授权", Toast.LENGTH_SHORT).show();
            } else {    //拒绝授权做的处理,弹出弹框提示用户授权
                dealwithPermiss(MainActivity.this, permissions[0]);
                Toast.makeText(this, "不同意授权", Toast.LENGTH_SHORT).show();
            }
        }

    }


    //未授权申请权限接下来的操作
    public void dealwithPermiss(final Activity context, String permission) {
        if (!ActivityCompat.shouldShowRequestPermissionRationale(context, permission)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("操作提示")
                    .setMessage("注意:当前缺少必要权限!\n请点击“设置”-“权限”-打开所需权限\n最后点击两次后退按钮,即可返回")
                    .setPositiveButton("去授权", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", context.getApplicationContext().getPackageName(), null);
                            intent.setData(uri);
                            context.startActivity(intent);
                        }
                    })
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "取消操作", Toast.LENGTH_SHORT).show();
                        }
                    }).show();

        }
    }

}

 

本文地址:https://blog.csdn.net/TianciZhu/article/details/107929514

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网