我需要从用户选择的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;
}
图像已正确删除,但在图库中仍保留已删除图像的预览。 当我点击它时,会加载一个黑色图像..
那么,在我从应用代码中删除一些图片后,如何更新图库预览?
答案 0 :(得分:36)
为什么你会这么复杂?
你可以这样简单:
getContentResolver().delete(Utils.imgUri, null, null);
答案 1 :(得分:4)
已解决添加:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
它使MediaScanner服务再次运行,这应该从设备的缓存中删除已删除的图像。
答案 2 :(得分:0)
您是否在清单文件中设置了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
权限?
答案 3 :(得分:0)
您确定文件路径是否正确?因为实际删除的方式应该没问题,请参阅此SO线程: How to delete a file from SD card?
/ mnt /真的应该在吗?此外,您是否有权从存储中删除文件? (android.permission.WRITE_EXTERNAL_STORAGE)
答案 4 :(得分:0)
在参数“data”中你也有Uri,只需做“data.getUri()
”。另外,您是否在真实设备中进行测试?如果是这样,如果是三星,那就不行了(见thread)。
答案 5 :(得分:0)
简单的一行;)
new File(uri.getPath()).delete();
并且在manifest中必须使用这些权限
android.permission.WRITE_EXTERNAL_STORAGE
答案 6 :(得分:-2)
在 onDestroy 方法中添加以下代码:
if(myFile.exists())
myFile.delete();
并且不要忘记在清单文件中添加权限
android.permission.WRITE_EXTERNAL_STORAGE