android 許可權問題

weixin_34007886發表於2017-07-17

今天和同事合作遇到一個問題:當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 效果好。

相關文章