Android: удалить изображение с SD-карты - PullRequest
12 голосов
/ 15 июля 2011

Мне нужно удалить изображение с SD-карты, выбранной пользователем. В моей деятельности после того, как пользователь выбрал изображение из галереи, я выполняю этот код:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            Utils.imgUri = data.getData();
            Utils.imgPath = getPath(Utils.imgUri);
            File file = new File(Utils.imgPath);
            boolean deleted = file.delete();
        }
    }
}

где getPath метод:

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    if(cursor!=null){
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    else return null;
}

Изображения удаляются правильно, но в галерее по-прежнему сохраняется предварительный просмотр удаленного изображения. Когда я нажимаю на него, загружается черное изображение ..

Итак, как я могу обновить предварительный просмотр галереи после удаления некоторых изображений из кода моего приложения?

Ответы [ 7 ]

36 голосов
/ 03 декабря 2011

Зачем вам делать это настолько сложным?

Вы можете сделать это так просто:

getContentResolver().delete(Utils.imgUri, null, null);
4 голосов
/ 05 августа 2011

Разрешено добавление:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

Он снова запускает службу MediaScanner, которая должна удалить удаленный образ из кэша устройства.

та же проблема здесь

0 голосов
/ 31 марта 2016

простая одна строка;)

 new File(uri.getPath()).delete();

и в манифесте необходимо использовать эти разрешения

android.permission.WRITE_EXTERNAL_STORAGE

0 голосов
/ 07 ноября 2014

добавить код ниже в onDestroy метод:

 if(myFile.exists())
 myFile.delete();

и не забудьте добавить разрешение в Манифест файл

android.permission.WRITE_EXTERNAL_STORAGE

0 голосов
/ 15 июля 2011

в параметре "data" у вас тоже есть Uri, просто выполните "data.getUri()".Кроме того, вы тестируете на реальных устройствах?если это так и если это Samsung, это не работает (см. поток ).

0 голосов
/ 15 июля 2011

Вы уверены, что путь к файлу указан правильно?Поскольку способ, которым вы выполняете фактическое удаление, должен быть в порядке, см. Эту ветку SO: Как удалить файл с SD-карты?

Должен ли / mnt / действительно быть там?Кроме того, у вас есть разрешения на удаление файлов из хранилища?(Android.permission.WRITE_EXTERNAL_STORAGE)

0 голосов
/ 15 июля 2011

Вы установили разрешение <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> в файле манифеста?

...