-2

I need to save image from camera in high qolity. I found this methods, but they don't work on API 24. What is the problem?

String timeStamp = new SimpleDateFormat("HH:mm:ss").format(new Date());
            String imageFileName = timeStamp + ".jpg";
            File storageDir = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);
            pictureImagePath = storageDir.getAbsolutePath() + "/" + imageFileName;
            File file = new File(pictureImagePath);
            Uri outputFileUri = Uri.fromFile(file);
            intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
            startActivityForResult(intent, CAM_REQUEST)

protected void onActivityResult:

File imgFile = new  File(pictureImagePath);
            if(imgFile.exists())
                bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

on logcat i see:

Could not execute method for android:onClick
08-17 22:23:51.934 2003-2003/? E/Zygote: v2
08-17 22:23:51.934 2003-2003/? I/libpersona: KNOX_SDCARD checking this for 10239
08-17 22:23:51.934 2003-2003/? I/libpersona: KNOX_SDCARD not a persona
08-17 22:23:51.936 2003-2003/? E/Zygote: accessInfo : 0
08-17 22:23:51.936 2003-2003/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2],  Con:u:r:zygote:s0 RAM:SEPF_SECMOBILE_7.0_0005, [-1 -1 -4 -1 0 1]
08-17 22:23:51.938 2003-2003/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=com.anhafiz.imagescanner 
08-17 22:23:51.941 2003-2003/? I/art: Late-enabling -Xcheck:jni
08-17 22:23:51.958 2003-2003/? D/TimaKeyStoreProvider: TimaKeyStore is enabled: try add TimaSignature Service and generateKeyPair Service
08-17 22:23:52.181 2003-2003/com.anhafiz.imagescanner W/System: ClassLoader referenced unknown path: /data/app/com.anhafiz.imagescanner-2/lib/arm
08-17 22:23:52.203 2003-2003/com.anhafiz.imagescanner I/InstantRun: starting instant run server: is main process
08-17 22:23:52.284 2003-2003/com.anhafiz.imagescanner W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
08-17 22:23:52.388 2003-2003/com.anhafiz.imagescanner D/AbsListView: Get MotionRecognitionManager
08-17 22:23:52.391 2003-2003/com.anhafiz.imagescanner D/MotionRecognitionManager: mSContextService = null
08-17 22:23:52.393 2003-2003/com.anhafiz.imagescanner D/MotionRecognitionManager: motionService = com.samsung.android.gesture.IMotionRecognitionService$Stub$Proxy@6ae5181
08-17 22:23:52.425 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: ThreadedRenderer.create() translucent=false
08-17 22:23:52.428 2003-2003/com.anhafiz.imagescanner D/InputTransport: Input channel constructed: fd=73
08-17 22:23:52.428 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: setView = DecorView@ff29c74[MainActivity] touchMode=true
08-17 22:23:52.444 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: dispatchAttachedToWindow
08-17 22:23:52.455 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: Relayout returned: oldFrame=[0,0][0,0] newFrame=[0,0][1536,2048] result=0x7 surface={isValid=true -1564385280} surfaceGenerationChanged=true
08-17 22:23:52.456 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: mHardwareRenderer.initialize() mSurface={isValid=true -1564385280} hwInitialized=true
08-17 22:23:52.462 2003-2032/com.anhafiz.imagescanner I/OpenGLRenderer: Initialized EGL, version 1.4
08-17 22:23:52.462 2003-2032/com.anhafiz.imagescanner D/OpenGLRenderer: Swap behavior 1
08-17 22:23:52.466 2003-2032/com.anhafiz.imagescanner D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1536x2048]-format:1
08-17 22:23:52.482 2003-2003/com.anhafiz.imagescanner W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
08-17 22:23:52.501 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: MSG_RESIZED_REPORT: frame=Rect(0, 0 - 1536, 2048) ci=Rect(0, 48 - 0, 0) vi=Rect(0, 48 - 0, 0) or=1
08-17 22:23:52.501 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
08-17 22:23:52.501 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true -1564385280}
08-17 22:23:52.502 2003-2003/com.anhafiz.imagescanner V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@7f4b55e nm : com.anhafiz.imagescanner ic=null
08-17 22:23:52.502 2003-2003/com.anhafiz.imagescanner I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
08-17 22:23:52.507 2003-2017/com.anhafiz.imagescanner D/InputTransport: Input channel constructed: fd=79
08-17 22:23:52.565 2003-2003/com.anhafiz.imagescanner V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@7280d3f nm : com.anhafiz.imagescanner ic=null
08-17 22:23:54.174 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: ViewPostImeInputStage processPointer 0
08-17 22:23:54.175 2003-2003/com.anhafiz.imagescanner W/System: ClassLoader referenced unknown path: /system/framework/QPerformance.jar
08-17 22:23:54.176 2003-2003/com.anhafiz.imagescanner E/BoostFramework: BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
08-17 22:23:54.176 2003-2003/com.anhafiz.imagescanner V/BoostFramework: BoostFramework() : mPerf = null
08-17 22:23:54.271 2003-2003/com.anhafiz.imagescanner D/ViewRootImpl@4a1dc47[MainActivity]: ViewPostImeInputStage processPointer 1
08-17 22:23:54.284 2003-2003/com.anhafiz.imagescanner D/AndroidRuntime: Shutting down VM
08-17 22:23:54.294 2003-2003/com.anhafiz.imagescanner E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.anhafiz.imagescanner, PID: 2003
                                                                        java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                            at android.view.View.performClick(View.java:6257)
                                                                            at android.widget.TextView.performClick(TextView.java:11149)
                                                                            at android.view.View$PerformClick.run(View.java:23705)
                                                                            at android.os.Handler.handleCallback(Handler.java:751)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6776)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
                                                                         Caused by: java.lang.reflect.InvocationTargetException
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                            at android.view.View.performClick(View.java:6257) 
                                                                            at android.widget.TextView.performClick(TextView.java:11149) 
                                                                            at android.view.View$PerformClick.run(View.java:23705) 
                                                                            at android.os.Handler.handleCallback(Handler.java:751) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                            at android.os.Looper.loop(Looper.java:154) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6776) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
                                                                         Caused by: android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/22%3A23%3A54.jpg exposed beyond app through ClipData.Item.getUri()
                                                                            at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
                                                                            at android.net.Uri.checkFileUriExposed(Uri.java:2346)
                                                                            at android.content.ClipData.prepareToLeaveProcess(ClipData.java:832)
                                                                            at android.content.Intent.prepareToLeaveProcess(Intent.java:9514)
                                                                            at android.content.Intent.prepareToLeaveProcess(Intent.java:9499)
                                                                            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
                                                                            at android.app.Activity.startActivityForResult(Activity.java:4403)
                                                                            at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:54)
                                                                            at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                                                                            at android.app.Activity.startActivityForResult(Activity.java:4362)
                                                                            at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:708)
                                                                            at com.anhafiz.imagescanner.MainActivity.takePhoto(MainActivity.java:58)
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                                                                            at android.view.View.performClick(View.java:6257) 
                                                                            at android.widget.TextView.performClick(TextView.java:11149) 
                                                                            at android.view.View$PerformClick.run(View.java:23705) 
                                                                            at android.os.Handler.handleCallback(Handler.java:751) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                            at android.os.Looper.loop(Looper.java:154) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6776) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
  • 3
    May add your StackTrace? – creativecreatorormaybenot Aug 17 '17 at 20:03
  • 2
    Did you add required permissions for External storage. You will need to check for runtime permissions on version M and above. API 19 doesn't need runtime permissions. – Swati Aug 17 '17 at 20:05
  • 1
    https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it and https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed are two likely issues. – CommonsWare Aug 17 '17 at 20:06
  • @Swati yes, i did – user8371023 Aug 17 '17 at 20:06
  • 1
    `on logcat i see: Could not execute method for android:onClick` **... on a null object reference**. Please add your ***FULL LogCat***, not what you think you can synthesize. – Phantômaxx Aug 17 '17 at 20:08
  • @ModularSynth i have added logcat. I used stackoverflow not long and i am not shure, that the logcat is added currently – user8371023 Aug 17 '17 at 20:41

1 Answers1

1

The thing is android has changed the way URI are shared among different apps in api 24 and above. In your case you are sharing a uri with the camera app. You will have to implement FileProvide class to give permission to other apps to use the URI

have a look at the this question and the answers for more clarity.

Avinash Joshi
  • 1,307
  • 8
  • 25