android調用相機時報錯:Failed to connect to camera service

高版本的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();
            }
        }
    }

判斷獲取了權限,進行下一步操作。如果沒有獲取權限,吐司或提示框提示用戶一下就好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章