如何将 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
不是 File
。 Uri
不必表示您可以访问的文件系统上的文件。 Uri
可能指向以下内容:
- 存储在您无法访问的可移动存储上
- 存储在您无法访问的另一个应用程序的内部存储器中
- 以加密形式存储,
ContentProvider
需要对其进行解密
- 存储在 SQLite 数据库的 BLOB 列中,
ContentProvider
需要加载它并提供它
- 存放在"the cloud",这里
ContentProvider
需要下载
- 即时生成,此网页的方式
- 等等
您可以使用 ContentResolver
和 openInputStream()
在 Uri
表示的内容上获得 InputStream
。您可以在您控制的某个文件上创建 FileOutputStream
。并且,您可以使用 Java I/O 从 InputStream
复制到 OutputStream
,在您控制的文件中制作您自己的内容副本。
我有一个图像 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
不是 File
。 Uri
不必表示您可以访问的文件系统上的文件。 Uri
可能指向以下内容:
- 存储在您无法访问的可移动存储上
- 存储在您无法访问的另一个应用程序的内部存储器中
- 以加密形式存储,
ContentProvider
需要对其进行解密 - 存储在 SQLite 数据库的 BLOB 列中,
ContentProvider
需要加载它并提供它 - 存放在"the cloud",这里
ContentProvider
需要下载 - 即时生成,此网页的方式
- 等等
您可以使用 ContentResolver
和 openInputStream()
在 Uri
表示的内容上获得 InputStream
。您可以在您控制的某个文件上创建 FileOutputStream
。并且,您可以使用 Java I/O 从 InputStream
复制到 OutputStream
,在您控制的文件中制作您自己的内容副本。