android - java.lang.SecurityException: Permission Denial: starting Intent with IMAGE_CAPTURE -


i'm debugging application on nexus 5 android m 6.0.1 , i'm getting problems camera's permissions. in application need open camera when button clicked, throws me exception:

04-06 14:03:25.213 15330-15330/clyky.cartracker w/system.err: java.lang.securityexception: permission denial: starting intent { act=android.media.action.image_capture flg=0x3 cmp=com.google.android.googlecamera/com.android.camera.activity.captureactivity clip={text/uri-list u:file:///storage/emulated/0/tesseractsample/imgs/ocr.jpg} (has extras) } processrecord{50bae23 15330:clyky.cartracker/u0a117} (pid=15330, uid=10117) revoked permission android.permission.camera 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.os.parcel.readexception(parcel.java:1666) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.os.parcel.readexception(parcel.java:1619) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.app.activitymanagerproxy.startactivity(activitymanagernative.java:2658) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.app.instrumentation.execstartactivity(instrumentation.java:1507) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.app.activity.startactivityforresult(activity.java:3930) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.support.v4.app.basefragmentactivityjb.startactivityforresult(basefragmentactivityjb.java:50) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.support.v4.app.fragmentactivity.startactivityforresult(fragmentactivity.java:79) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.app.activity.startactivityforresult(activity.java:3890) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.support.v4.app.fragmentactivity.startactivityforresult(fragmentactivity.java:859) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ clyky.cartracker.activities.addvehicleactivity.startcameraactivity(addvehicleactivity.java:99) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ clyky.cartracker.activities.addvehicleactivity.access$000(addvehicleactivity.java:35) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ clyky.cartracker.activities.addvehicleactivity$1.onclick(addvehicleactivity.java:66) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.view.view.performclick(view.java:5204) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.view.view$performclick.run(view.java:21156) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.os.handler.handlecallback(handler.java:739) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.os.handler.dispatchmessage(handler.java:95) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.os.looper.loop(looper.java:148) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ android.app.activitythread.main(activitythread.java:5458) 04-06 14:03:25.226 15330-15330/clyky.cartracker w/system.err:     @ java.lang.reflect.method.invoke(native method) 04-06 14:03:25.227 15330-15330/clyky.cartracker w/system.err:     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:726) 04-06 14:03:25.227 15330-15330/clyky.cartracker w/system.err:     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:616) 

i've added permission of read/write external folder , camera in manifest:

<uses-permission android:name="android.permission.camera"/>     <uses-permission android:name="android.permission.read_external_storage"/>     <uses-permission android:name="android.permission.write_external_storage"/> 

this method try start camera:

private void startcameraactivity() {     try     {         log.d("debug", "sto provando lanciare la fotocamera");         string imgs_path = environment.getexternalstoragedirectory().tostring() + "/tesseractsample/imgs";         preparedirectory(imgs_path);          string img_path = imgs_path + "/ocr.jpg";          outputfileuri = uri.fromfile(new file(img_path));          final intent takepictureintent = new intent(mediastore.action_image_capture);         takepictureintent.putextra(mediastore.extra_output, outputfileuri);          if (takepictureintent.resolveactivity(getpackagemanager()) != null) {             startactivityforresult(takepictureintent, photo_request_code);         }     }     catch (exception e)     {         e.printstacktrace();     } } 

i think problem ask camera's permissions never shown. when activity launched asks me read/write external storage, never camera. i've taken code permissions on web. uses class:

public class requestpermissionstooltoolimpl implements requestpermissionstool {     private static final string confirmation_dialog = "confirmationdialog";     private static final string tag = requestpermissionstooltoolimpl.class.getsimplename();     private activity activity;      @override     public void requestpermissions(activity activity, string[] permissions)     {         log.d("debug", "sto chiedendo permessi.");         int x = 0;          map<integer, string> permissionsmap = new hashmap<>();         this.activity = activity;           (int = 0; < permissions.length; i++) {             permissionsmap.put(i, permissions[i]);         }          (map.entry<integer, string> permission : permissionsmap.entryset())         {             if (!ispermissiongranted(activity, permission.getvalue()))             {                 if (activitycompat.shouldshowrequestpermissionrationale(activity, permission.getvalue()))                 {                     confirmationdialog.newinstance(permission.getkey(), permission.getvalue()).show(activity.getfragmentmanager(), confirmation_dialog);                 }                 else {                     activitycompat.requestpermissions(activity, permissions,                             permission.getkey());                     return;                 }             }         }     }      @override     public boolean ispermissionsgranted(context context, string[] permissions) {          (string permission : permissions)         {             if (!ispermissiongranted(context, permission)) {                 return false;             }         }         return true;     }      @override     public void onpermissiondenied() {         errordialog.newinstance("permission needs").                 show(activity.getfragmentmanager(), confirmation_dialog);     }      private boolean ispermissiongranted(context context, string permission)     {         return activitycompat.checkselfpermission(context, permission) == packagemanager.permission_granted;     }       /**      * shows ok/cancel confirmation dialog permission.      */     public static class confirmationdialog extends dialogfragment     {          private static final string arg_permission = "permission";         private static final string arg_request_code = "request_code";          public static confirmationdialog newinstance(int permissionkey, string permissionvalue) {             confirmationdialog dialog = new confirmationdialog();             bundle bundle = new bundle();             bundle.putstring(arg_permission, permissionvalue);             bundle.putint(arg_request_code, permissionkey);             dialog.setarguments(bundle);             return dialog;         }          @override         public dialog oncreatedialog(bundle savedinstancestate) {              return new alertdialog.builder(getactivity())                     .setmessage("please allow permission")                     .setpositivebutton(android.r.string.ok, new dialoginterface.onclicklistener() {                         @override                         public void onclick(dialoginterface dialog, int which) {                              activitycompat.requestpermissions(getactivity(),                                     new string[]{getarguments().getstring(arg_permission)},                                     getarguments().getint(arg_request_code));                         }                     })                     .setnegativebutton(android.r.string.cancel,                             new dialoginterface.onclicklistener() {                                 @override                                 public void onclick(dialoginterface dialog, int which) {                                     toast.maketext(getactivity(), "not available", toast.length_short).show();                                 }                             })                     .create();         }     }      /**      * shows error message dialog.      */     public static class errordialog extends dialogfragment {          private static final string arg_message = "message";          public static errordialog newinstance(string message) {             errordialog dialog = new errordialog();             bundle args = new bundle();             args.putstring(arg_message, message);             dialog.setarguments(args);             return dialog;         }          @override         public dialog oncreatedialog(bundle savedinstancestate) {             final activity activity = getactivity();             return new alertdialog.builder(activity)                     .setmessage(getarguments().getstring(arg_message))                     .setpositivebutton(android.r.string.ok, new dialoginterface.onclicklistener() {                         @override                         public void onclick(dialoginterface dialoginterface, int i) { //nothing                         }                     })                     .create();         }      } } 

and these methods in activity uses permissions:

private void requestpermissions()     {         string[] permissions = new string[]{manifest.permission.write_external_storage};         requesttool = new requestpermissionstooltoolimpl();         requesttool.requestpermissions(this, permissions);     }      @override     public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) {          boolean grantedallpermissions = true;         (int grantresult : grantresults) {             if (grantresult != packagemanager.permission_granted) {                 grantedallpermissions = false;             }         }          if (grantresults.length != permissions.length || (!grantedallpermissions)) {              requesttool.onpermissiondenied();         } else {             super.onrequestpermissionsresult(requestcode, permissions, grantresults);         }     } 

use simple piece of code open camera in android m or after versions

public static final int request_camera = 111;  void checkpermissiontoopencamera(){ if (build.version.sdk_int >= android.os.build.version_codes.m) {                 if (activitycompat.checkselfpermission(profileactivity.this, manifest.permission.camera)                         != packagemanager.permission_granted &&                         activitycompat.checkselfpermission(profileactivity.this, manifest.permission.write_external_storage)                                 != packagemanager.permission_granted) {                     if (activitycompat.shouldshowrequestpermissionrationale(profileactivity.this,                             manifest.permission.camera)) {                         alertdialog.builder alertbuilder = new alertdialog.builder(profileactivity.this);                         alertbuilder.setcancelable(false);                         alertbuilder.settitle("permission necessary");                         alertbuilder.setmessage("camera , gallery permissions necessary");                         alertbuilder.setpositivebutton(android.r.string.yes, new dialoginterface.onclicklistener() {                             @targetapi(build.version_codes.jelly_bean)                             public void onclick(dialoginterface dialog, int which) {                                 activitycompat.requestpermissions(profileactivity.this,                                         new string[]{manifest.permission.camera, manifest.permission.write_external_storage},                                         request_camera);                             }                         });                         alertdialog alert = alertbuilder.create();                         alert.show();                     } else {                         activitycompat.requestpermissions(profileactivity.this,                                 new string[]{manifest.permission.camera, manifest.permission.write_external_storage},                                 request_camera);                     }                 } else {                     startcameraactivity();                 }             } else {                 startcameraactivity();             }              } 

check permission status accept or decline made check in onrequestpermissionsresult :

@override public void onrequestpermissionsresult(int requestcode, string[] permissions, int[] grantresults) {     switch (requestcode) {    case request_camera:             if (grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted) {                 startcameraactivity();             } else {             log.d(tag,"you not able upload profile picture");             }             break; 

Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -