Android开发经验谈Android开发Android知识

android 权限问题

2017-07-17  本文已影响83人  喜欢萌妹子的少年

今天和同事合作遇到一个问题:当targetSdkVersion = 22 时候在6.0 以上手机运行(做了权限校验)也正常弹出来了询问界面 但是用户不操作依然可以进去,用户拒绝依然进去,然后闪退了。询问之后说忘了 考虑用户拒绝的情况了....好吧 !那这个坑我自己填。

首先在调取相机的时候做如下判断:

    //检查权限(6.0以上做权限判断)
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             if (checkPermission())
                openCamera();
             else
               requestCameraPermission();
      } else {
           // 6.0 以下
             openCamera();
    }

下面是我上面的方法:/*** 打开相机 */

   private void openCamera() {

      // 需要实现 空方法不起作用

   }

检查权限/**检查权限

   private boolean checkPermission() {
    boolean isCanUse = true;
    Camera mCamera = null;
    try {
        mCamera = Camera.open();
        Camera.Parameters mParameters = mCamera.getParameters(); //针对魅族手机
        mCamera.setParameters(mParameters);
    } catch (Exception e) {
        isCanUse = false;
    }
    if (mCamera != null) {
        try {
            mCamera.release();
        } catch (Exception e) {
            e.printStackTrace();
            return isCanUse;
        }
    }
    return isCanUse;
}

申请相机权限/**申请权限/ (好想第二次提示询问没用 正在研究)

private void requestCameraPermission() {
    Log.i("-", "相机权限未被授予,需要申请!");
    // 相机权限未被授予,需要申请!
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.CAMERA)) {
        // 如果访问了,但是没有被授予权限,则需要告诉用户,使用此权限的好处
        Log.i("", "申请权限说明!");
        Snackbar.make(recyclerView, R.string.permission_camera_rationale,
                Snackbar.LENGTH_INDEFINITE)
                .setAction(R.string.ok, new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // 这里重新申请权限
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{Manifest.permission.CAMERA},
                                REQUEST_CAMERA);
                    }
                })
                .show();
    } else {
        // 第一次申请,就直接申请
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
                REQUEST_CAMERA);
    }
}

权限回调

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_CAMERA) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 已经有权限
            OkLogger.e("已经有权限", "已经有权限");

            startActivity(new Intent(this, RecordedVideoActivity.class));

        } else {
            //用户勾选了不再询问
            //提示用户手动打开权限
            if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {

                Snackbar.make(recyclerView, R.string.permissions_not_granted,
                        Snackbar.LENGTH_SHORT).show();
            }


        }
    }
}

以上方法可以实现 每次询问 但效果没有6.0 以上 tag>23 效果好。

上一篇下一篇

猜你喜欢

热点阅读