檢測Adroid手機攝像機權限是否被第三方限制

當我們要調用相機時一般會先檢查是否有相機的使用權限

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
      == PackageManager.PERMISSION_GRANTED) {
   //已有權限

}else{
   //沒有權限,申請權限
   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
         11);

}

如果用戶從系統設置裏關閉權限 是沒有問題的,
但是如果用戶通過第三方安全軟件限制了權限,就會出現檢測到已經獲得權限,但是不能使用照相機的情況!
這樣就會導致後面邏輯出錯或者拍照直接返回了一張空圖片!(調用系統照相機被第三方限制權限時不會報任何異常,只是自己穿進去的url沒有圖片)
爲了解決這個問題,做了各種嘗試,各種框架,都沒法準確的判斷出是否被第三方限制了權限.
最後想到解決辦法是直接調用照相機,如果能調用則認爲有權限,如果中途報異常則認爲麼有權限
代碼:

/**
 * 通過嘗試打開相機的方式判斷有無拍照權限(在6.0以下使用擁有root權限的管理軟件可以管理權限)
 *
 * @return
 */
public static boolean cameraIsCanUse() {
    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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章