When you click on the button, it creates an Intent on the standard Camera application, takes a snapshot and saves it in ImageView . When you save a photo in ImageLayout a second time after launch, the application crashes

 public class FullscreenActivity extends AppCompatActivity { private final int CAMERA_RESULT = 0; private ImageView mImageView; Button btnTakePhoto; Bundle bundle; private static int TAKE_PICTURE = 1; private Uri mOutputFileUri; TextView textView; /** * Whether or not the system UI should be auto-hidden after * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. */ private static final boolean AUTO_HIDE = true; /** * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after * user interaction before hiding the system UI. */ private static final int AUTO_HIDE_DELAY_MILLIS = 3000; /** * Some older devices needs a small delay between UI widget updates * and a change of the status and navigation bar. */ private static final int UI_ANIMATION_DELAY = 300; private final Handler mHideHandler = new Handler(); private View mContentView; private final Runnable mHidePart2Runnable = new Runnable() { @SuppressLint("InlinedApi") @Override public void run() { // Delayed removal of status and navigation bar // Note that some of these constants are new as of API 16 (Jelly Bean) // and API 19 (KitKat). It is safe to use them, as they are inlined // at compile-time and do nothing on earlier devices. mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } }; private View mControlsView, mControlsView1; private final Runnable mShowPart2Runnable = new Runnable() { @Override public void run() { // Delayed display of UI elements ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.show(); } mControlsView.setVisibility(View.VISIBLE); mControlsView1.setVisibility(View.VISIBLE); } }; private boolean mVisible; private final Runnable mHideRunnable = new Runnable() { @Override public void run() { hide(); } }; /** * Touch listener to use for in-layout UI controls to delay hiding the * system UI. This is to prevent the jarring behavior of controls going away * while interacting with activity UI. */ private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } return false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); bundle = savedInstanceState; mVisible = true; mImageView = (ImageView) findViewById(R.id.imageView); mControlsView = findViewById(R.id.fullscreen_content_controls); mControlsView1 = findViewById(R.id.fullscreen_content_controls1); mContentView = findViewById(R.id.fullscreen_content1); btnTakePhoto=(Button) findViewById(R.id.makePhotoBtn); textView = (TextView) mContentView; // Set up the user interaction to manually show or hide the system UI. mContentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { toggle(); } }); // Upon interacting with UI controls, delay any scheduled hide() // operations to prevent the jarring behavior of controls going away // while interacting with the UI. findViewById(R.id.makePhotoBtn).setOnTouchListener(mDelayHideTouchListener); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Trigger the initial hide() shortly after the activity has been // created, to briefly hint to the user that UI controls // are available. delayedHide(100); } private void toggle() { if (mVisible) { hide(); } else { show(); } } private void hide() { // Hide UI first ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); } mControlsView.setVisibility(View.GONE); mControlsView1.setVisibility(View.GONE); mVisible = false; // Schedule a runnable to remove the status and navigation bar after a delay mHideHandler.removeCallbacks(mShowPart2Runnable); mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); } @SuppressLint("InlinedApi") private void show() { // Show the system bar mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); mVisible = true; // Schedule a runnable to display UI elements after a delay mHideHandler.removeCallbacks(mHidePart2Runnable); mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); } /** * Schedules a call to hide() in [delay] milliseconds, canceling any * previously scheduled calls. */ private void delayedHide(int delayMillis) { mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); } public void PhotoClick(View view) { saveFullImage(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TAKE_PICTURE) { // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, содСрТит Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ if (data != null) { if (data.hasExtra("data")) { try { Bitmap thumbnailBitmap = data.getParcelableExtra("data"); // TODO КакиС-Ρ‚ΠΎ дСйствия с ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€ΠΎΠΉ thumbnailBitmap = RotateBitmap(thumbnailBitmap, 90); mImageView.setImageBitmap(thumbnailBitmap); } catch (Exception e) { textView.setText("ошибка"); } } } else { // TODO КакиС-Ρ‚ΠΎ дСйствия с ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, try{ Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mOutputFileUri); bitmap = RotateBitmap(bitmap,90); textView.setText(" "); mImageView.setImageBitmap(bitmap); } catch (Exception e) { textView.setText("ошибка"); } // сохранСнным ΠΏΠΎ адрСсу mOutputFileUri } } } public Bitmap RotateBitmap(Bitmap source, float angle) { Matrix matrix = new Matrix(); matrix.postRotate(angle); return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); } private void saveFullImage() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File file = new File(Environment.getExternalStorageDirectory(), "test.jpg"); mOutputFileUri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutputFileUri); startActivityForResult(intent, TAKE_PICTURE); } } 

Please tell me what the problem may be in the Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mOutputFileUri); line Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mOutputFileUri); or in the saveFullImage() method?

    1 answer 1

    My extrasensory abilities were only enough for this:

    Most likely you have FileUriExposedException , it is treated using FileProvider .

    Recently, direct pushing of a file:// link is non-kosher and it is required to mask the link with something like content:// , for which FileProvider actually needed