我需要从用户选择的sd卡中删除图像。在我的Activity中,当用户从图库中选择图像后,我执行以下代码:
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;
}
图像被正确删除,但在图库中仍然保留被删除图像的预览。当我点击它,是加载一个黑色的图像..
所以,我怎么能更新画廊预览,我从我的应用程序代码中删除一些图像后?
你为什么要把它弄得那么复杂?
你可以这么简单:
getContentResolver().delete(Utils.imgUri, null, null);
解析添加:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
它使MediaScanner服务再次运行,这将从设备的缓存中删除已删除的图像。
这里也是一样
您是否在manifest文件中设置了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
权限?
您确定文件路径正确吗?因为你做实际删除的方式应该是好的,看看这个SO线程:如何从SD卡上删除文件?
/mnt/真的应该存在吗?另外,您是否有从存储中删除文件的权限?(android.permission.WRITE_EXTERNAL_STORAGE)
在参数"data"中,您也有Uri,只需执行" data.getUri()
"。另外,你是否在真实设备上进行测试?如果是,如果是三星,它是不工作的(见这个线程)。
simple one line;)
new File(uri.getPath()).delete();
和manifest必须使用这些权限
android.permission.WRITE_EXTERNAL_STORAGE
在onDestroy方法中添加下面的代码:
if(myFile.exists())
myFile.delete();
不要忘记在Manifest文件
中添加权限 android.permission.WRITE_EXTERNAL_STORAGE