當我們要調用相機時一般會先檢查是否有相機的使用權限
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;
}