如何将 URI 转换为棉花糖中的真实路径?

How to convert URI to real path in marshmallow?

我有一个图像 URI,我想将此 URI 转换为真实路径。我看过很多答案,但 none 对我有用。我正在使用棉花糖 6.0.1。图片 URI 为 content://com.android.providers.media.documents/document/image%3A52530.

代码:

   sendImageFromFolder.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);

                }
            });

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

     if(requestCode==1) {
          Uri uri = data.getData();//how to convert this uri to real path .
    }

    }

Uri 不是 FileUri 不必表示您可以访问的文件系统上的文件。 Uri 可能指向以下内容:

  • 存储在您无法访问的可移动存储上
  • 存储在您无法访问的另一个应用程序的内部存储器中
  • 以加密形式存储,ContentProvider 需要对其进行解密
  • 存储在 SQLite 数据库的 BLOB 列中,ContentProvider 需要加载它并提供它
  • 存放在"the cloud",这里ContentProvider需要下载
  • 即时生成,此网页的方式
  • 等等

您可以使用 ContentResolveropenInputStream()Uri 表示的内容上获得 InputStream。您可以在您控制的某个文件上创建 FileOutputStream。并且,您可以使用 Java I/O 从 InputStream 复制到 OutputStream,在您控制的文件中制作您自己的内容副本。