从谷歌驱动器获取文件名URI
问题描述:
在我的应用程序中,用户可以从相机和图库中选择图像加载到ImageView中。从谷歌驱动器获取文件名URI
我使用下面的代码来打开相关应用来选择图像:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
问题是与谷歌驱动器。如果用户选择从谷歌驱动器的图像,我得到的URI是这样的:内容://com.google.android.apps.docs.storage.legacy/enc%3DHxtpLaMr66OMOzDOKTRZ-5ed7q7Szj7F7nC0IlxBnV8hx2P1%0A
我能够产生位图,但无法获取文件名。
InputStream input = context.getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory
.decodeStream(input);
我需要显示用户选择的文件名。
请帮助我从谷歌驱动器URI中提取图像名称。
答
我能够生成位图,但无法获取文件名
有不必是一个文件名。并非每个字节序列都有一个文件名。例如,这个答案没有文件名。
请帮我从谷歌驱动器uri中提取图像名称。
这不是严格可行的。您可以切换到ACTION_OPEN_DOCUMENT
。然后,将产生的Uri
包装在a DocumentFile
using fromSingleUri()
中。然后在DocumentFile
上致电getName()
。这将是一个“显示名称”,用户应该认识。 它仍然可能不是文件名。
我不能排除Google Drive API有可能从Uri
获取显示名称的可能性,您可以从ACTION_GET_CONTENT
获得显示名称,但这会让我感到意外。如果您将CATEGORY_OPENABLE
添加到您的Intent
,也有可能您的Uri
从ACTION_GET_CONTENT
将与DocumentFile
—一起使用,它会增加这种情况的可能性。
签入Kitkat,DocumentFile对象正在创建,但getName()方法返回null。我怎样才能得到显示名称kitkat及以下? –
- 检查以上评论 –
@RohanPatel:这可能是一个'DocumentFile'限制。我[这个库中有一个更好的版本](https://github.com/commonsguy/cwac-document)。或者,您可以使用'ContentResolver''自己查询'OpenableColumns'。 – CommonsWare