1. 程式人生 > >Android6.0以上許可權獲取許可權的問題

Android6.0以上許可權獲取許可權的問題

  今天把 targetSdkVersion 從22 換成23  專案裡面有一個錄視訊的應用
   直接啟動  在 targetSdkVersion>=23 裡面 拍攝視訊的程式碼 就報錯了。 
   需要判斷許可權 。   
   1.把需要判斷的許可權列出來
    final String[] PERMISSIONS = new String[]{
        Manifest.permission.CAMERA,
        Manifest.permission.RECORD_AUDIO
     };
   2.去看看 許可權是否有開啟
          ActivityCompat.requestPermissions(htmlActivity, PERMISSIONS, BURNE_VIDEO);
    3.許可權回撥
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[]      grantResults) {
        // 判斷是否有許可權 

        if (requestCode == BURNE_VIDEO && hasAllPermissionsGranted(grantResults)) {

           //有許可權 去啟動Video

            startVideo();

        } else {

            //去開啟許可權   

            showPermissionDialog();
        }
    }
   4判斷有沒有許可權
    private boolean hasAllPermissionsGranted(int[] grantResults) {
        for (int grantResult : grantResults) {
                
                PackageManager.PERMISSION_GRANTED  //有許可權   PackageManager.PERMISSION_DENIED無許可權
             if (grantResult == PackageManager.PERMISSION_DENIED) {
                return false;
            }
        }
        return true;

    }

    4.彈出對話方塊 讓 使用者去設定 許可權

    private void showPermissionDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(htmlActivity);
        builder.setTitle("幫助");
        builder.setMessage("當前應用缺少相機許可權或者錄音許可權。請點選\"設定\"-開啟所需許可權。");
        // 拒絕, 退出應用
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });


        builder.setPositiveButton("設定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startAppSettings();
                dialog.dismiss();
            }
        });
        builder.setCancelable(false);
        builder.show();
    }

   以上就是 Android6.0系統判斷有沒有許可權

    Android 6.0一下 直接啟動相機

    但是在魅族手機上面在沒有許可權的時候報錯

  at android.hardware.Camera.setHasPreviewCallback(Native Method)
08-31 14:32:03.465 29135-29135/com.badianban.hidate W/System.err:     at android.hardware.Camera.setPreviewCallback(Camera.java:951)

   用來判斷 是否可以啟動相機

private boolean isCamera() {
        boolean isCanUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open();
            if (mCamera != null) {


                Camera.Parameters mParameters = mCamera.getParameters();
                mParameters.set("orientation", "portrait");
                mCamera.setParameters(mParameters);
            }
        } catch (Exception e) {
            e.printStackTrace();
            isCanUse = false;


        }
        try {
            if (mCamera != null) {
                mCamera.release();
            }
        } catch (Exception emCamera) {
            emCamera.printStackTrace();
        }
        return isCanUse;

    }

private boolean setCameraParams() {
        boolean isCanUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open();
            if (mCamera != null) {


                Camera.Parameters mParameters = mCamera.getParameters();
                mParameters.set("orientation", "portrait");
                mCamera.setParameters(mParameters);
            }
        } catch (Exception e) {
            e.printStackTrace();
            isCanUse = false;


        }
        try {
            if (mCamera != null) {
                mCamera.release();
            }
        } catch (Exception emCamera) {
            emCamera.printStackTrace();
        }
        return isCanUse;
    }