невозможно удалить растровое изображение из внешнего хранилища - PullRequest
0 голосов
/ 25 июня 2018

Я не могу удалить картинку из локального хранилища.Я хочу, чтобы это произошло: удалите старую картинку, добавьте новую картинку с тем же именем.Когда я меняю имя картинки, она без проблем загружается как новая.Но когда я не меняю его название, это показывает старую картинуЯ попытался context.deleteFile (имя файла).file.exists возвращает false после удаления, но изображение все еще там.Решение с перезаписью может быть полезным.У меня также есть разрешения внешнего хранилища в манифесте.Спасибо!

Удаление:

void deleteOldPicture(String filename, Context context){
    File file = new ImageSaver(context).setFileName(filename).setDirectoryName("images").createFile();
    file.delete();
}

Создание файла

File createFile() {
    File directory;
    if(external){
        directory = getAlbumStorageDir(directoryName);
    }
    else {
        directory = context.getDir(directoryName, Context.MODE_PRIVATE);
    }
    return new File(directory, fileName);
}

private File getAlbumStorageDir(String albumName) {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e("ImageSaver", "Directory not created");
    }
    return file;
}

Сохранение файла:

private String saveFileInSD(String name, ImageView image){
    String filename = name+parentId+".png";
    Log.e("Filename is", filename);
    new ImageSaver(getApplicationContext()).setFileName(filename).setDirectoryName("images").save(((BitmapDrawable) image.getDrawable()).getBitmap());
    return filename;
}

1 Ответ

0 голосов
/ 25 июня 2018

добавьте эту библиотеку в ваш Gradle, это поможет немного очистить ваш код:

implementation 'org.apache.commons:commons-io:1.3.2'

Чтобы сохранить изображение, сделайте следующее:

//Compress the Bitmap
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            yourBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);

            //save Bitmap to file and get it form preview activity and especially to avoid TransactionTooLargeException
            File imageFile = new File(getExternalCacheDir(), "image.png");
            try {
                FileOutputStream imageFileStream = new FileOutputStream(imageFile);
                IOUtils.copyLarge(new ByteArrayInputStream(stream.toByteArray()), imageFileStream);
                IOUtils.closeQuietly(imageFileStream);
            } catch (Exception e) {
                e.printStackTrace();
            }

, чтобы получить путь к сохраненному растровому изображению, просто используйте следующий метод:

imageFile.getAbsolutePath()
...