2011-07-15 120 views
12

我需要从用户选择的SD卡中删除图像。 在我的活动中,用户经过选择从图库的图像,我执行此代码:Android:从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; 
} 

的图像被正确地去除,但在画廊仍然是已删除图像的预览。 当我点击它,是加载一个黑色的图像..

所以,我从我的应用程序代码删除一些图像后,如何更新库预览?

回答

4

解决补充说:

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

这再次使得MediaScanner服务运行,应该从设备的缓存中删除删除的图像。

same problem here

+0

不起作用。在画廊留下图像。上面的说明不清楚,我在file.delete()之后立即添加了你的行。函数被调用。如果这是正确的,则代码不能按预期工作。 – Bisclavret

+0

Super..works like Charm ... + 1票 –

0

您是否在清单文件中设置了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />权限?

0

你确定文件路径是否正确?因为你做实际删除的方式应该没问题,看看这个线程: How to delete a file from SD card?

应该/ mnt /真的在那里吗?另外,您是否有权从存储中删除文件? (android.permission.WRITE_EXTERNAL_STORAGE)

+0

是的,我有此权限。 “/ mnt /真的在那里?”是什么意思?我使用getPath()方法从Uri获取图像的路径。 – Matteo

+0

虽然path看起来是错误的,因为file.exists()也返回false。这里使用另一种(但相似)的方式来获取路径:http://stackoverflow.com/questions/2507898/how-to-pick-a-image-from-gallery-sd-card-for-my-app- in-android –

0

在参数“数据”你也有Uri,只是做“data.getUri()”。另外,你在一个真实的设备中测试?如果是这样,如果它是三星,这是行不通的(见thread)。

+0

我用“data.getUri()”得到Uri,然后用“getPath()”方法得到路径。有没有办法使用它的Uri删除文件? – Matteo

+0

如果使用带有该URI的File对象不起作用,则尝试使用contentResolver.delete(uri,null,null) – Finuka

36

你为什么要弄得这么复杂吗?

你能做到像这样简单:

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

添加以下代码的onDestroy

如果(myFile.exists()) myFile.delete();

,不要忘记在清单文件

android.permission.WRITE_EXTERNAL_STORAGE

0

简单的一行添加许可;)

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

和清单必须使用这些权限

android.permission.WRITE_EXTERNAL_STORAGE

+0

并非所有的uris都是路径。 –

+0

是的,这是真的,但这是,如果你正在玩SDCard。 –