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
Post a Comment