android 权限问题

作者: 喜欢萌妹子的少年 | 来源:发表于2017-07-17 17:43 被阅读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 效果好。

    相关文章

      网友评论

        本文标题:android 权限问题

        本文链接:https://www.haomeiwen.com/subject/sglqkxtx.html