高版本的android在使用一些敏感權限的時候,需要動態授權。
沒有動態授權的話,應用在運行到
cameraManager.openDriver(surfaceHolder);
openDriver()方法會拋出異常。
當點擊拍照按鈕的時候,先判斷是否已經獲取相機權限,如果已經獲取到,則繼續下一步的操作。如果沒有權限,申請權限。
int isPermission = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA);
if (isPermission == PackageManager.PERMISSION_GRANTED){
//跳轉到掃碼頁面
Intent intent = new Intent(SeatAddActivity.this, CaptureActivity.class);
startActivityForResult(intent, SCAN_REQUEST_CODE);
}else {
//申請權限
ActivityCompat.requestPermissions(SeatAddActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE);
}
重寫onRequestPermissionsResult()方法,處理授權結果。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// showToast("您已獲取相機權限");
//跳轉到掃碼頁面
Intent intent = new Intent(SeatAddActivity.this, CaptureActivity.class);
startActivityForResult(intent, SCAN_REQUEST_CODE);
} else {
Toast.makeText(this, "應用需要您的相機權限,拒絕可能導致無法識別二維碼", Toast.LENGTH_SHORT).show();
}
}
}
判斷獲取了權限,進行下一步操作。如果沒有獲取權限,吐司或提示框提示用戶一下就好。