代码之家  ›  专栏  ›  技术社区  ›  Shweta Chauhan

从nought和oreo设备中的mediastore获取URI中的文件名和路径

  •  0
  • Shweta Chauhan  · 技术社区  · 8 年前

    我有这样的图像URI:“ content://com.sceburgapp.provider/external_files/.pkgname/file1.jpg 他说:“这是一个很好的选择。”

    现在每当我找到路,它就会给我: /外部文件/.pgname/file1.jpg 他说:“这是一个很好的选择。”

    我想从内容URI获取realpaths。 我从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使用了文件提供程序,所以它只在nought和oreo设备中工作。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Mayur Patel    8 年前

    使用 ContentResolver openInputStream() 得到一个 InputStream Uri 输入流 FileOutputStream 在您控制的文件上复制内容,然后使用该文件。