'File not found, but file exists (android)

My App creates a file in it data directory : /storage/emulated/0/Android/media/one.empty3.feature.app/data/MyImage_38.jpg And opens a second activity ChooseEffects. From then it process the file and should output a result. I check all permissions for writing, try to write in Pictures/ directory or in app data directory.

Edit

public void fillGallery(Bitmap photo, File file) {
    System.out.println("Replaced : " + file.getAbsolutePath());
    File[] allFiles = new File[]{file};
    ArrayList<View> views = new ArrayList<>();

    for (int i = 0; i < Objects.requireNonNull(allFiles).length; i++) {
        //views.add(imageView);
        Bitmap read = ImageIO.read(allFiles[i]).bitmap;
        imageView.setImageBitmap(read);
        currentFile = allFiles[i];
    }
    gallery = findViewById(R.id.imageTakenPreviewGallery);
    gallery.addTouchables(views);

    File myFilePicture = writePhoto(photo, "MyFilePicture");

    currentFile = myFilePicture;
    imageView.setImageBitmap(photo);

    Toast.makeText(this, "File " + myFilePicture.toString() + " added", Toast.LENGTH_LONG).show();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == MY_CAMERA_PERMISSION_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        } else {
            Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
        }
    }
}

public File writePhoto(@NotNull Bitmap bitmap, String name) {

    Intent camera = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    int n = 1;
    //Folder is already created
    String dirName1 = "", dirName2 = "";
    do {
        dirName1 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath()
                + "/FeatureApp/data/" + name + "_" + n + ".jpg";
        dirName2 = "/storage/emulated/0/Android/media/one.empty3.feature.app/"//+getFilesDir()
                + "/data/" + name + "_" + n + ".jpg";
        n++;
    } while (new File(dirName1).exists() || new File(dirName2).exists());


    //startActivityForResult(camera, 1);
    File dir1 = new File(dirName1.substring(0, dirName1.lastIndexOf(File.separator)));
    File file1 = new File(dirName1);
    File dir2 = new File(dirName2.substring(0, dirName2.lastIndexOf(File.separator)));
    File file2 = new File(dirName2);

    Uri uriSavedImage = Uri.fromFile(file2);
    camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

    try {
        // Make sure the Pictures directory exists.
        if (!dir1.exists())
            if (!dir1.mkdirs()) {
                System.err.println("Error creating dir = " + dir1.getAbsolutePath());
                return null;
            }
        if (!dir2.exists())
            if (!dir2.mkdirs()) {
                System.err.println("Error creating dir = " + dir2.getAbsolutePath());
                return null;
            }
        ImageIO.write(new BufferedImage(bitmap), "jpg", file1);
        ImageIO.write(new BufferedImage(bitmap), "jpg", file2);
        System.out.println("File (photo) " + file1.getAbsolutePath());
        System.out.println("File (photo) " + file2.getAbsolutePath());
        return file2;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

My second method is in another activity and write image after filtering :

https://github.com/manuelddahmen/featureApp/blob/main/app/src/main/java/one/empty3/feature/app/ChooseEffect.kt



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source