Reputation: 276
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
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
Reputation: 4668
simple one line ;)
new File(uri.getPath()).delete();
and in manifest must use these permissions
android.permission.WRITE_EXTERNAL_STORAGE
Upvotes: 0
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
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.
Upvotes: 4
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
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
Reputation: 659
Have you set the <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
permission in the manifest file?
Upvotes: 0