当图像的URI已知时,如何从android中删除图像?

当图像的URI已知时,如何从android中删除图像?,android,android-intent,uri,gallery,delete-file,Android,Android Intent,Uri,Gallery,Delete File,我正在开发一个android应用程序,它在一个活动中从图库中选择一个图像并在另一个活动中显示。但是当我尝试删除所选图像时,它不会删除。我在两个活动之间传递它的uri。非常感谢 这是我的密码: 活动主屏幕 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if

我正在开发一个android应用程序,它在一个活动中从图库中选择一个图像并在另一个活动中显示。但是当我尝试删除所选图像时,它不会删除。我在两个活动之间传递它的uri。非常感谢

这是我的密码:

活动主屏幕

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);

     if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
          Uri uri = data.getData();
          Intent i = new Intent(this, Imageviewer.class);       
          i.putExtra("imgpath", uri.toString());
          startActivity(i);
     }
}
IMAGEVIEWER活动:

Uri imageUri;
imageUri = Uri.parse(intent.getStringExtra("imgpath"));
File fdelete = new File(imageUri.toString());

    if (fdelete.exists()) {
         if (fdelete.delete()) {
               System.out.println("file Deleted :" );
         } else {
               System.out.println("file not Deleted :");
         }
    }
尝试以下操作:(在第二个
活动中
ImageViewerActivity

Intent intent = getIntent();
        String receivedPath = intent.getExtras().getString("imgpath");
        File fdelete = new File(receivedPath);

        if (fdelete.exists()) {
            if (fdelete.delete()) {
                System.out.println("file Deleted :" );
            } else {
                System.out.println("file not Deleted :");
            }
        }

您还可以逐行调试代码,查看并检查
ImgPath
是否正确

首先,您必须获取图像的真实路径:

//getting real path from uri
private String getFilePath(Uri uri) {
    String[] projection = {MediaStore.Images.Media.DATA};

    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(projection[0]);
        String picturePath = cursor.getString(columnIndex); // returns null
        cursor.close();
        return picturePath;
    }
    return null;
}
然后您可以按如下方式删除此文件:

Uri imageUri;
imageUri = Uri.parse(intent.getStringExtra("imgpath"));
File fdelete = new File(getFilePath(imageUri));

if (fdelete.exists()) {
     if (fdelete.delete()) {
           System.out.println("file Deleted :" );
     } else {
           System.out.println("file not Deleted :");
     }
}

活动主屏幕中
imgpath
转换为字符串一次,然后在imgviewer活动中也转换了
URI
,这就是问题所在。这样做:首先从URI获取imgpath,将其转换为字符串,然后将其发送到下一个活动(
IMAGEVIEWER
)这样就不需要转换它或将其用作
Uri
,只需检索路径,然后使用它。另外,检查以下答案:getFilePath返回nullalways@hkchakladar也许您没有正确的读取存储权限?如果您的android版本高于5,则必须向用户请求运行时许可。