Android

安卓(Android)6.0权限动态申请

2019-04-03  本文已影响0人  老子爱吃荷包蛋

安卓6.0以后,一些危险权限不仅需要在AndroidManifest.xml中写入权限,还需要在代码中动态申请
本文以文件读写权限为例:
权限申请分三步
1.检查是否有读写权限(读和写申请一个即可获得读写权限)
2.申请权限
3.权限申请的结果

代码:检查权限

 //检查申请权限
    private void checkPermission() {
        //检查权限(NEED_PERMISSION)是否被授权 PackageManager.PERMISSION_GRANTED表示同意授权
        if (!hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            //用户已经拒绝过一次,再次弹出权限申请对话框需要给用户一个解释
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission
                    .WRITE_EXTERNAL_STORAGE)) {
                Toast.makeText(this, "请开通相关权限,否则无法正常使用本应用!", Toast.LENGTH_SHORT).show();
            }
            //申请权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);

        } else {
            Log.i("hebaodan", "checkPermission: 已经授权!");
        }
    }

   /**
     * 判断是否有某个权限
     *
     * @param context
     * @param permission
     * @return
     */
    public static boolean hasPermission(Context context, String permission) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Android 6.0判断,6.0以下跳过。在清单文件注册即可,不用动态请求,这里直接视为有权限
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

权限申请结果回调

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == REQUEST_CODE) {  //REQUEST_CODE对应申请权限时的REQUEST_CODE
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "授权成功!", Toast.LENGTH_SHORT).show();
                Log.i("hebaodan_permission", "checkPermission: 已经授权!3333");
              
            }
        }
    }
上一篇下一篇

猜你喜欢

热点阅读