Java 如何在marshmallow中将URI转换为实际路径?
我有一个图像URI,我想把这个URI转换成一个真实的路径。我看过很多答案,但没有一个对我有用。我用的是棉花糖6.0.1。图像URI是Java 如何在marshmallow中将URI转换为实际路径?,java,android,uri,Java,Android,Uri,我有一个图像URI,我想把这个URI转换成一个真实的路径。我看过很多答案,但没有一个对我有用。我用的是棉花糖6.0.1。图像URI是content://com.android.providers.media.documents/document/image%3A52530 代码: Uri不是文件。Uri不必表示您可以访问的文件系统上的文件。Uri可能指向以下内容: 存储在可移动存储上,您无法访问 存储在另一个应用程序的内部存储器中,您无法访问该应用程序 以加密形式存储,其中ContentPro
content://com.android.providers.media.documents/document/image%3A52530
代码:
Uri
不是文件
。Uri
不必表示您可以访问的文件系统上的文件。Uri
可能指向以下内容:
- 存储在可移动存储上,您无法访问
- 存储在另一个应用程序的内部存储器中,您无法访问该应用程序
- 以加密形式存储,其中
需要对其进行解密ContentProvider
- 存储在SQLite数据库的BLOB列中,其中
需要加载并提供服务ContentProvider
- 存储在“云”中,
需要下载它ContentProvider
- 动态生成,与此网页的方式相同
- 等等
您可以使用
ContentResolver
和openInputStream()
在Uri
表示的内容上获取InputStream
。您可以在控制的某个文件上创建FileOutputStream
。而且,您可以使用Java I/O将输入流
复制到输出流
,在您控制的文件中创建自己的内容副本。aUri
不是文件
。Uri
不必表示您可以访问的文件系统上的文件。Uri
可能指向以下内容:
- 存储在可移动存储上,您无法访问
- 存储在另一个应用程序的内部存储器中,您无法访问该应用程序
- 以加密形式存储,其中
需要对其进行解密ContentProvider
- 存储在SQLite数据库的BLOB列中,其中
需要加载并提供服务ContentProvider
- 存储在“云”中,
需要下载它ContentProvider
- 动态生成,与此网页的方式相同
- 等等
ContentResolver
和openInputStream()
在Uri
表示的内容上获取InputStream
。您可以在控制的某个文件上创建FileOutputStream
。而且,您可以使用Java I/O从InputStream
复制到OutputStream
,在您控制的文件中创建自己的内容副本
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 .
}
}