Yirga
Yirga

Reputation: 891

Android camera runtime permission error?

I am trying to use Camera2 api in my app even though i am checking runtime camera permission using the following code.

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;
    }
}

I have also permission included in the AndroidManifest.xml file.

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

But when i run my app the permission dialog is not showing up but camera is not granted toast is showing up.

1) Why is the permission dialog not showing up?

2) Even there is no dialog showing up how is the camera is not granted toast showing up? I have searched a lot but nothing help!

Upvotes: 4

Views: 4307

Answers (1)

Vishvendu Palawat
Vishvendu Palawat

Reputation: 576

Here is the working runtime permission for camera 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;
            }
        }
    }

Upvotes: 4

Related Questions