Sid
Sid

Reputation: 1274

Android application not asking for camera permission

I am developing an SDK(.aar) which third parties can consume. In my sample application when I use the aar, I can see that the application doesnt prompt for the camera permission. When I open the aar and see its manifest.xm, it contains the below:

<!-- WRITE_EXTERNAL_STORAGE is needed because we are storing there the config files of KM -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.read_external_storage" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.sensor.accelerometer" />

Since the camera is present as a required permission can anyone tell me why it is not coming up when installing the sample app.

Upvotes: 0

Views: 5499

Answers (2)

upile
upile

Reputation: 113

Here is how i check for permissions:

    public boolean permissionsGranted() {

    boolean allPermissionsGranted = true;
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
        boolean hasWriteExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
        boolean hasReadExternalPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
        boolean hasCameraPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED);
        if (!hasWriteExternalPermission || !hasReadExternalPermission || !hasCameraPermission) {
            allPermissionsGranted = false;
        }
    }
    return allPermissionsGranted;
}

This is how i make the request if permissionsGranted() method returns false

 String[] permissions = {android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE};
                        ActivityCompat.requestPermissions(this, permissions, 1);

And you have to override onRequestPermissionsResult method, below is what i have in mine.

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 1: {
            boolean startActivity = true;
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults.length > 0 && grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                    String permission = permissions[i];
                    boolean showRationale = shouldShowRequestPermissionRationale(permission);
                    if (!showRationale) {
                        Intent intent = new Intent();
                        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                        Uri uri = Uri.fromParts("package", getActivity().getPackageName(), null);
                        intent.setData(uri);
                        startActivityWithIntent(intent);
                        Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show();
                        startActivity = false;
                        break;
                    } else {
                        Toast.makeText(this, "Enable required permissions", Toast.LENGTH_LONG).show();
                        break;
                    }
                }
            }
            if(startActivity) {
                getActivity().finish();
                startActivityWithIntent(getIntent());
            }
        }
    }
}

public void startActivityWithIntent(Intent intent){
    startActivity(intent);
}

showRationale is to check if user ticked never ask again, if so then i start the settings activity so that user can enable permissions.

Let me know if you need more clarity

Upvotes: 0

Slamper
Slamper

Reputation: 445

Since Android 6.0 you have to request the permssions at runtime and the user is not prompted at the time of installation.

https://developer.android.com/training/permissions/requesting.html

Upvotes: 2

Related Questions