Matteo
Matteo

Reputation: 276

Android: remove an image from sd card

I need to remove an image from sd card chosen by user. In my Activity, after an user select an image from gallery, i execute this code:

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();
        }
    }
}

where getPath method is:

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;
}

The images are correctly removed but in the gallery still remain a preview of the removed image. When i tap on it, is loaded a black image..

so, How can I update the gallery previews, after I delete some images from my app code?

Upvotes: 11

Views: 21774

Answers (7)

Rohit Jain
Rohit Jain

Reputation: 229

add below code in onDestroy method:

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

and don't forget to add permission in Manifest file

android.permission.WRITE_EXTERNAL_STORAGE

Upvotes: -1

Muhammad Adil
Muhammad Adil

Reputation: 4668

simple one line ;)

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

and in manifest must use these permissions

android.permission.WRITE_EXTERNAL_STORAGE

Upvotes: 0

Kalpesh
Kalpesh

Reputation: 1807

Why would you make it that complex?

You can do it as simple as this:

getContentResolver().delete(Utils.imgUri, null, null);

Upvotes: 36

Matteo
Matteo

Reputation: 276

Resolved adding:

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

It makes the MediaScanner service run again, which should remove the deleted image from the device's cache.

same problem here

Upvotes: 4

Finuka
Finuka

Reputation: 730

in the parameter "data" you have the Uri too, just do "data.getUri()". Also, are you testing in a real devices? if so and if it is a samsung, it isn't work (see this thread).

Upvotes: 0

Stefan H Singer
Stefan H Singer

Reputation: 5504

Are you sure that the file path is correct? Because the way you do the actual delete should be fine, see this SO thread: How to delete a file from SD card?

Should the /mnt/ really be there? Also, do you have the permissions to delete files from the storage? (android.permission.WRITE_EXTERNAL_STORAGE)

Upvotes: 0

az4dan
az4dan

Reputation: 659

Have you set the <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> permission in the manifest file?

Upvotes: 0

Related Questions