Android摄像机运行时许可错误



即使我使用以下代码检查运行时摄像机的权限,我也尝试在应用中使用Camera2 API。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                cameraManager.openCamera(cameraId, stateCallBack, null);
            } else {
                if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA))
                    Toast.makeText(getApplicationContext(), "PLease allow the app to use camera app", Toast.LENGTH_LONG).show();
            }
            ActivityCompat.requestPermissions(CaptureImageActivity.this,new String[]{"android.manifest.permissin.CAMERA"}, CAMERA_REQUEST_RESULT);
        } else {
            cameraManager.openCamera(cameraId, stateCallBack, null);
        }
@Override
public void onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResult) {
    switch (requestCode) {
        case CAMERA_REQUEST_RESULT:
            if (grantResult[0] == PackageManager.PERMISSION_GRANTED) {
                try {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                      //this method is created because of openCamera method below i don't understand why this method is created
                        return;
                    }
                    cameraManager.openCamera(cameraId, stateCallBack, null);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }
            if (grantResult[0] != PackageManager.PERMISSION_GRANTED)
                Toast.makeText(getApplicationContext(), "camera is not granted", Toast.LENGTH_LONG).show();

            break;
        default:
            super.onRequestPermissionsResult(requestCode, permission, grantResult);
            break;
    }
}

我还在androidmanifest.xml文件中包含权限。

 <uses-permission android:name="android.permission.CAMERA" />

但是,当我运行我的应用程序时,权限对话框未显示,但没有授予相机敬酒。

1(为什么未显示"权限"对话框?

2(即使没有显示对话框,摄像机是如何未授予吐司的?我搜索了很多,但没有任何帮助!

这是相机API的工作运行时许可

 private static final int PERMISSIONS_REQUEST_CAPTURE_IMAGE = 1;
 if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        // User may have declined earlier, ask Android if we should show him a reason
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
            // show an explanation to the user
            // Good practise: don't block thread after the user sees the explanation, try again to request the permission.
        } else {
            // request the permission.
            // CALLBACK_NUMBER is a integer constants
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAPTURE_IMAGE);
            // The callback method gets the result of the request.
        }
    } else {

    }
@Override
    public void onRequestPermissionsResult ( int requestCode, String[] permissions,
    int[] grantResults){
        switch (requestCode) {
            case PERMISSIONS_REQUEST_CAPTURE_IMAGE: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted 
                    Log.d("", "permission granted success");

                } else {
                    // permission denied
                    Log.d("", "permission denied");
                }
                return;
            }
        }
    }

最新更新