从Naught and Oreo设备中的媒体存储中从URI获取文件名和路径

时间:2018-06-28 04:31:03

标签: android

我有这样的图像uri:“ content://com.iceburgapp.provider/external_files/.pkgName/File1.jpg

现在,每当我获得路径时,它就会给我:“ /external_files/.pkgName/File1.jpg

我想从内容Uri获取RealPathFrom。 我从stackoverflow获得了解决方案,并且尝试了以下代码,但对我不起作用:

    public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
}

任何人都知道该怎么做?使用上述代码时出现以下错误。 java.lang.IllegalArgumentException:列'_data'不存在。可用列:[]

由于contentUri使用文件提供程序,因此仅在Naught and oreo设备中不起作用。

1 个答案:

答案 0 :(得分:1)

使用ContentResolveropenInputStream()InputStream所标识的内容上获得Uri。理想情况下,无论您要做什么,都直接使用该流。或者,在您控制的文件上使用该InputStream和某些FileOutputStream来复制内容,然后使用该文件。

  

此功能在Android N之前的设备中正常运行