I use this code to get the image from the camera and put it on the image:
private void openCamera() { mMediaUri =getOutputMediaFileUri(MEDIA_TYPE_IMAGE); Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri); startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO); // dialog.dismiss(); } private Uri getOutputMediaFileUri(int mediaTypeImage) { //check for external storage if(isExternalStorageAvaiable()) { File mediaStorageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES); String fileName = ""; String fileType = ""; String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date()); fileName = "IMG_"+timeStamp; fileType = ".jpg"; File mediaFile; try { mediaFile = File.createTempFile(fileName,fileType,mediaStorageDir); Log.i("st","File: "+Uri.fromFile(mediaFile)); } catch (IOException e) { e.printStackTrace(); Log.i("St","Error creating file: " + mediaStorageDir.getAbsolutePath() +fileName +fileType); return null; } return Uri.fromFile(mediaFile); } //something went wrong return null; } private boolean isExternalStorageAvaiable() { String state = Environment.getExternalStorageState(); if(Environment.MEDIA_MOUNTED.equals(state)) { return true; } else { return false; } } public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == DIALOG_CODE) { String s = data.getStringExtra("choose"); if(s.equals(getString(R.string.takephoto))) { openCamera(); } else if(s.equals(getString(R.string.library))) { // openGallery(); } } else if(resultCode == RESULT_OK) { if (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_PICK_PHOTO) //dalla fotocamera { if (data != null) //caso galleria { mMediaUri = data.getData(); } Picasso.with(getActivity()).load(mMediaUri).resize(1280, 1280).centerCrop().into(photo, new Callback() { public void onSuccess() { } @Override public void onError() { } }); } } }
in Marshmallow this works fine, but in Nougat I got this error:
E/AndroidRuntime: FATAL EXCEPTION: main PID: 15471 android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.plen.myapp/files/Pictures/IMG_20161214_1516561294620205.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:8925) at android.content.Intent.prepareToLeaveProcess(Intent.java:8910) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1519) at android.app.Activity.startActivityForResult(Activity.java:4224) at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77) at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:26) at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:146) at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:937) at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1046) at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:956) at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:945) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment.openCamera(AddAircraftFirstPartFragment.java:263) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment.askReadStorage(AddAircraftFirstPartFragment.java:338) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment.askWriteStorage(AddAircraftFirstPartFragment.java:355) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment.loadNewPhoto(AddAircraftFirstPartFragment.java:159) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment.access$000(AddAircraftFirstPartFragment.java:48) at com.plen.myapp.MyAircrafts.AddAircraftFirstPartFragment$1.onClick(AddAircraftFirstPartFragment.java:75) at android.view.View.performClick(View.java:5609) at android.view.View$PerformClick.run(View.java:22266) 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:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
How can I solve this error? I was looking for solutions, but no one is working.
thanks
source share