【问题标题】:Android: remove an image from sd cardAndroid:从 SD 卡中删除图像
【发布时间】:2011-07-15 12:51:07
【问题描述】:

我需要从用户选择的 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;
}

图像已正确删除,但图库中仍保留已删除图像的预览。 当我点击它时,会加载一个黑色图像..

那么,从我的应用代码中删除一些图像后,如何更新图库预览?

【问题讨论】:

    标签: android android-sdcard


    【解决方案1】:

    你为什么要把它弄得这么复杂?

    你可以这么简单:

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

    【讨论】:

      【解决方案2】:

      解决添加:

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

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

      same problem here

      【讨论】:

      • 不起作用。在图库中留下图像。上面的说明不清楚,我在 file.delete(); 之后立即添加了您的行函数被调用。如果这是正确的,则代码不会按预期工作。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您确定文件路径正确吗?因为您执行实际删除的方式应该没问题,请参阅此 SO 线程: How to delete a file from SD card?

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

        【讨论】:

        • 是的,我有这个权限。 “/mnt/真的在那里?”是什么意思。我使用 getPath() 方法从 Uri 获取图像的路径。
        • 看来路径是错误的,因为 file.exists() 也返回 false。这里使用了另一种(但类似的)获取路径的方法:stackoverflow.com/questions/2507898/…
        【解决方案5】:

        在参数“data”中你也有 Uri,只需执行“data.getUri()”。另外,您是否在真实设备中进行测试?如果是这样,如果它是三星,它就行不通(见thread)。

        【讨论】:

        • 我使用“data.getUri()”获取 Uri,然后使用“getPath()”方法获取路径。有没有办法使用它的 Uri 删除文件?
        • 如果使用带有该 uri 的 File 对象不起作用,请尝试使用 contentResolver.delete(uri,null,null)
        【解决方案6】:

        简单的一行;)

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

        并且在清单中必须使用这些权限

        android.permission.WRITE_EXTERNAL_STORAGE

        【讨论】:

        • 并非所有的uri都是路径。
        • 是的,这是真的,但如果你正在玩 SDCard。
        【解决方案7】:

        onDestroy 方法中添加以下代码:

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

        别忘了在Manifest文件中添加权限

        android.permission.WRITE_EXTERNAL_STORAGE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          • 2011-08-06
          • 1970-01-01
          • 2018-07-09
          • 1970-01-01
          • 2011-01-29
          相关资源
          最近更新 更多