android - Camera Result always returns RESULT_CANCELED -


i want take pictures camera. need them temporally following:

private void takepicture() {     intent intent = new intent(mediastore.action_image_capture);      if (intent.resolveactivity(this.getactivity().getpackagemanager()) != null) {         try {             this.imagefile = file.createtempfile("crop_shot", ".jpg", this.getactivity().getcachedir());              intent.putextra(mediastore.extra_output, uri.fromfile(this.imagefile));             intent.putextra(mediastore.extra_video_quality, 1);              this.startactivityforresult(intent, globals.request_take_photo);         } catch (ioexception e) {             e.printstacktrace();         }     } } 

unfortunately result code result_canceled in onactivityresult

@override public void onactivityresult(int requestcode, int resultcode, intent data) {     log.v("pictureedit", "onactivityresult");      super.onactivityresult(requestcode, resultcode, data);      if(resultcode == activity.result_ok) {         if(requestcode == globals.request_take_photo) {             log.v("pictureedit", "onactivityresult take photo");              this.startcropimage(uri.fromfile(this.imagefile));         } else if (requestcode == globals.request_pick_photo) {             log.v("pictureedit", "onactivityresult pick photo");              this.startcropimage(data.getdata());         } else if (requestcode == globals.request_crop_photo) {             log.v("pictureedit", "onactivityresult crop photo");              this.imageencoded = data.getstringextra(globals.key_image_encoded);              this.imageview.setimagebitmap(images.decodeimage(imageencoded));             this.buttonsave.setenabled(true);         } else {             log.v("pictureedit", "onactivityresult requestcode: " + requestcode + ", result: " + resultcode);         }     } else {         log.v("pictureedit", "onactivityresult resultcode not ok: " + resultcode);     } } 

every solutions found far on stackoverflow , in web did not solve problem. use cache directory creating temp file:

file.createtempfile("crop_shot", ".jpg", this.getactivity().getcachedir()); 

and have correct permissions:

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

picking images smartphone works fine:

private void pickpicture() {     intent intent = new intent(intent.action_pick, android.provider.mediastore.images.media.external_content_uri);      this.startactivityforresult(intent, globals.request_pick_photo); } 

so why camera returning result_canceled?

it appearing on nexus 4 android 6.0 , on samsung galaxy s iii android 4.2.

i use cache directory creating temp file:

first, third-party camera app has no rights work app's private cache directory on internal storage.

second, not supposed create file. camera app supposed create file. camera apps may confused , refuse overwrite file.

so, create file object pointing location on external storage (e.g., getexternalcachedir()), not create file yet. use file object basis extra_output value.

also note mediastore.extra_video_quality recording videos; has no meaning action_image_capture.


Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -