public void callTakePicture()

in src/android/CameraLauncher.java [248:307]


    public void callTakePicture(int returnType, int encodingType) throws IllegalStateException {

        // CB-10120: The CAMERA permission does not need to be requested unless it is declared
        // in AndroidManifest.xml. This plugin does not declare it, but others may and so we must
        // check the package info to determine if the permission is present.
        boolean manifestContainsCameraPermission = false;

        // write permission is not necessary, unless if we are saving to photo album
        // On API 29+ devices, write permission is completely obsolete and not required.
        boolean manifestContainsWriteExternalPermission = false;

        boolean cameraPermissionGranted = PermissionHelper.hasPermission(this, Manifest.permission.CAMERA);
        boolean writeExternalPermissionGranted = false;
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
            writeExternalPermissionGranted = PermissionHelper.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        else {
            writeExternalPermissionGranted = true;
        }

        try {
            PackageManager packageManager = this.cordova.getActivity().getPackageManager();
            String[] permissionsInPackage = packageManager.getPackageInfo(this.cordova.getActivity().getPackageName(), PackageManager.GET_PERMISSIONS).requestedPermissions;
            if (permissionsInPackage != null) {
                for (String permission : permissionsInPackage) {
                    if (permission.equals(Manifest.permission.CAMERA)) {
                        manifestContainsCameraPermission = true;
                    }
                    else if (permission.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                        manifestContainsWriteExternalPermission = true;
                    }
                }
            }
        } catch (NameNotFoundException e) {
            // We are requesting the info for our package, so this should
            // never be caught
        }

        ArrayList<String> requiredPermissions = new ArrayList<>();
        if (manifestContainsCameraPermission && !cameraPermissionGranted) {
            requiredPermissions.add(Manifest.permission.CAMERA);
        }

        if (saveToPhotoAlbum && !writeExternalPermissionGranted) {
            // This block only applies for API 24-28
            // because writeExternalPermissionGranted is always true on API 29+
            if (!manifestContainsWriteExternalPermission) {
                throw new IllegalStateException("WRITE_EXTERNAL_STORAGE permission not declared in AndroidManifest");
            }

            requiredPermissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }

        if (!requiredPermissions.isEmpty()) {
            PermissionHelper.requestPermissions(this, TAKE_PIC_SEC, requiredPermissions.toArray(new String[0]));
        }
        else {
            takePicture(returnType, encodingType);
        }
    }