Android.os.FileUriExposedException: file.jpg выставляется вне приложения через ClipData.Item.getUri ()

Я пытаюсь сделать кнопку, открывающую камеру и съемку. Мой код здесь

//for imports check on bottom of this code block public class HomeProfileActivity extends AppCompatActivity { //Button camera public static final String TAG = HomeProfileActivity.class.getSimpleName(); public static final int REQUEST_TAKE_PHOTO = 0; public static final int REQUEST_TAKE_VIDEO = 1; public static final int REQUEST_PICK_PHOTO = 2; public static final int REQUEST_PICK_VIDEO = 3; public static final int MEDIA_TYPE_IMAGE = 4; public static final int MEDIA_TYPE_VIDEO = 5; private Uri mMediaUri; private ImageView photobutton; private Button buttonUploadImage, buttonTakeImage; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home_profile); ButterKnife.bind(this); } @OnClick(R.id.buttonTakeImage) void takePhoto() { mMediaUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); if (mMediaUri == null) { Toast.makeText(this, "There was a problem accessing your device's external storage.", Toast.LENGTH_LONG).show(); } else { Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri); startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK){ if (requestCode == REQUEST_TAKE_PHOTO) { Intent intent = new Intent(this, ViewImageActivity.class); intent.setData(mMediaUri); startActivity(intent); } } else if (resultCode != RESULT_CANCELED){ Toast.makeText(this, "Sorry, there was an error", Toast.LENGTH_SHORT).show(); } } private Uri getOutputMediaFileUri(int mediaType) { // check for external storage if (isExternalStorageAvailable()) { // get the URI // 1. Get the external storage directory File mediaStorageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); // 2. Create a unique file name String fileName = ""; String fileType = ""; String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); if (mediaType == MEDIA_TYPE_IMAGE) { fileName = "IMG_" + timeStamp; fileType = ".jpg"; } else if (mediaType == MEDIA_TYPE_VIDEO) { fileName = "VID_" + timeStamp; fileType = ".mp4"; } else { return null; } // 3. Create the file File mediaFile; try { mediaFile = File.createTempFile(fileName, fileType, mediaStorageDir); Log.i(TAG, "File: " + Uri.fromFile(mediaFile)); // 4. Return the file's URI return Uri.fromFile(mediaFile); } catch (IOException e) { Log.e(TAG, "Error creating file: " + mediaStorageDir.getAbsolutePath() + fileName + fileType); } } // something went wrong return null; } private boolean isExternalStorageAvailable(){ String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)){ return true; } else { return false; } } import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import butterknife.ButterKnife; import butterknife.OnClick; 

У меня также проблема с startActivityForResult в методе onclick и import java.text.SimpleDateFormat; Также перепрыгивать в среду выполнения исключения, я работаю с buildtoolsversion sdk 25

Помимо решения, использующего FileProvider, есть еще один способ обойти это. Проще говоря

  StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); 

В методе Application.onCreate (). Таким образом, VM игнорирует экспозицию URI файла.