Android: Failure resolution: beginning intent with revoked permission android.permission.CAMERA

I am trying to start ACTION_IMAGE_CAPTURE activity to take a snapshot in my application and I get an error message in the subject.

Stacktrace:

FATAL EXCEPTION: main Process: il.ac.shenkar.david.todolistex2, PID: 3293 java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity } from ProcessRecord{22b0eb2 3293:il.ac.shenkar.david.todolistex2/u0a126} (pid=3293, uid=10126) with revoked permission android.permission.CAMERA 

Camera permissions are added to the manifest.xml fie file:

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> 

Here is the call to open the camera:

 RadioGroup radioGroup = (RadioGroup) findViewById(R.id.statusgroup); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton rb = (RadioButton) findViewById(R.id.donestatusRBtn); if(rb.isChecked()) { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } } }); 
+23
source share
7 answers

hi you can use these permissions in the manifest file with a different permission,

 <uses-feature android:name="android.hardware.camera.any" android:required="true" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 

If it still doesn't work, you are probably using android M, so you need to add permissions programmatically.

here is an example

hi here are a few steps for permission to install for android M and remember that you must declare the same permission in the manifest file.

Step 1. Declare a global variable:

  public final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 1; //requests for runtime time permissions String CAMERA_PERMISSION = android.Manifest.permission.CAMERA; String READ_EXTERNAL_STORAGE_PERMISSION = android.Manifest.permission.READ_EXTERNAL_STORAGE; String WRITE_EXTERNAL_STORAGE_PERMISSION = android.Manifest.permission.WRITE_EXTERNAL_STORAGE; // for security permissions @DialogType private int mDialogType; private String mRequestPermissions = "We are requesting the camera and Gallery permission as it is absolutely necessary for the app to perform it\ functionality.\nPlease select \"Grant Permission\" to try again and \"Cancel \" to exit the application."; private String mRequsetSettings = "You have rejected the camera and Gallery permission for the application. As it is absolutely necessary for the app to perform you need to enable it in the settings of your device.\nPlease select \"Go to settings\" to go to application settings in your device and \"Cancel \" to exit the application."; private String mGrantPermissions = "Grant Permissions"; private String mCancel = "Cancel"; private String mGoToSettings = "Go To Settings"; private String mPermissionRejectWarning = "Cannot Proceed Without Permissions</string> <string name="explanation_permission_location_request">We are requesting the location permission as it is necessary for the app to perform search functionality properly.\nPlease select \"Grant Permission\" to try again and \"Cancel \" to deny permission."; 

// create a dialog like this.

 // type of dialog opened in MainActivity @IntDef({DialogType.DIALOG_DENY, DialogType.DIALOG_NEVER_ASK}) @Retention(RetentionPolicy.SOURCE) @interface DialogType { int DIALOG_DENY = 0, DIALOG_NEVER_ASK = 1; } 

Step 2. Use this code in your main action

 @TargetApi(Build.VERSION_CODES.M) @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) { // Call your camera here. } else { boolean showRationale1 = shouldShowRequestPermissionRationale(CAMERA_PERMISSION); boolean showRationale2 = shouldShowRequestPermissionRationale(READ_EXTERNAL_STORAGE_PERMISSION); boolean showRationale3 = shouldShowRequestPermissionRationale(WRITE_EXTERNAL_STORAGE_PERMISSION); if (showRationale1 && showRationale2 && showRationale3) { //explain to user why we need the permissions mDialogType = ValueConstants.DialogType.DIALOG_DENY; // Show dialog with openAlertDialog(mRequestPermissions, mGrantPermissions, mCancel, this, MyActivity.this); } else { //explain to user why we need the permissions and ask him to go to settings to enable it mDialogType = ValueConstants.DialogType.DIALOG_NEVER_ASK; openAlertDialog(mRequsetSettings, mGoToSettings, mCancel, this, MyActivity.this); } } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } //check for camera and storage access permissions @TargetApi(Build.VERSION_CODES.M) private void checkMultiplePermissions(int permissionCode, Context context) { String[] PERMISSIONS = {CAMERA_PERMISSION, READ_EXTERNAL_STORAGE_PERMISSION, WRITE_EXTERNAL_STORAGE_PERMISSION}; if (!hasPermissions(context, PERMISSIONS)) { ActivityCompat.requestPermissions((Activity) context, PERMISSIONS, permissionCode); } else { // Open your camera here. } } private boolean hasPermissions(Context context, String... permissions) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } } return true; } 

Step 3. Call this method in the oncreate method,

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { checkMultiplePermissions(REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS, MyActivity.this); } else { // Open your camera here. } 

Step 4. Dialog to deny permissions

 public static void openAlertDialog(String message, String positiveBtnText, String negativeBtnText, final OnDialogButtonClickListener listener,Context mContext) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.AlertDialogCustom); builder.setPositiveButton(positiveBtnText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); listener.onPositiveButtonClicked(); } }); builder.setPositiveButton(positiveBtnText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); listener.onNegativeButtonClicked(); } }); builder.setTitle(mContext.getResources().getString(R.string.app_name)); builder.setMessage(message); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setCancelable(false); builder.create().show(); } 

// Create this interface

 public interface OnDialogButtonClickListener { void onPositiveButtonClicked(); void onNegativeButtonClicked(); } 

and implement this in your activities where you need to add permissions.

 @Override public void onPositiveButtonClicked() { switch (mDialogType) { case ValueConstants.DialogType.DIALOG_DENY: checkMultiplePermissions(REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS, MyActivity.this); break; case ValueConstants.DialogType.DIALOG_NEVER_ASK: redirectToAppSettings(MyActivity.this); break; } } @Override public void onNegativeButtonClicked() { } 

And any permission you can call from here, and every result that you can get in the onRequestPermissionsResult override method, is this.

Thankyou

hope this helps you (Y).

+16
source

Delete this permission

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

I ran into this error running my application in android 7. After the tests, I noticed that the user permission was not in project A, but it was in project B, which I tested only on Android 5. Therefore, I delete this permission in the project B to run it on another device that targets Android 7, and finally it can open.

In adittion, I added the fileprovider code that Android offers here https://developer.android.com/training/camera/photobasics.html Hope this helps.

+39
source

In my case, the problem was related to my emulator permissions,

To fix the problem:

1- Go into the settings of your emulator.

2- Look for Applications and Notifications.

3- Click "Add Permission."

see image: https://i.stack.imgur.com/z4GfK.png

4- Select a camera from the list.

5- Find your application in the list provided.

6- Turn on the camera.

see image: https://i.stack.imgur.com/dJ8wG.pngEnjoy

Now you can use the camera on the emulator :)

+7
source
 private String [] permissions = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.ACCESS_FINE_LOCATION", "android.permission.READ_PHONE_STATE", "android.permission.SYSTEM_ALERT_WINDOW","android.permission.CAMERA"}; 

on your OnCreate add this:

 int requestCode = 200; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(permissions, requestCode); } 
+4
source

For future links, if someone encounters a problem in Android projects related to flutter:

https://github.com/apptreesoftware/flutter_barcode_reader/issues/32#issuecomment-420516729

0
source

In case someone else gets this problem, my problem was that the application did not request any permissions when I ran it. Xiaomi devices seem to automatically deny permissions to apps installed via adb. I just turned on permissions through the settings and it worked.

0
source

in your androidManifest, you should add:

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

here is a complete manifest example of a camera project for Android.

-eight
source

All Articles