从Google Drive URI获取文件名

3
在我的应用程序中,用户可以从相机和图库中选择图片并加载到ImageView中。我正在使用以下代码打开相关应用程序以选择图片:
 Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

问题出在Google Drive上。如果用户从Google Drive选择一张图片,我会得到这样的URI:content://com.google.android.apps.docs.storage.legacy/enc%3DHxtpLaMr66OMOzDOKTRZ-5ed7q7Szj7F7nC0IlxBnV8hx2P1%0A
我能够生成位图,但无法获取文件名。
 InputStream input = context.getContentResolver().openInputStream(uri);
               Bitmap bitmap = BitmapFactory
                        .decodeStream(input);

我需要展示用户选择的文件名。

请帮助我从Google Drive URI中提取图片名称。


你能找到解决方案吗? - Shubham Anand
3个回答

5

我可以生成位图,但无法获取文件名

并不是每个字节序列都有文件名。例如,这篇答案就没有文件名。

请帮忙从Google Drive的URI中提取图像名称。

这并非完全可能。

你可以切换到 ACTION_OPEN_DOCUMENT。然后,将结果的 Uri 包装在 DocumentFile 中,使用 fromSingleUri()。接下来,在 DocumentFile 上调用 getName()。这将是一个“显示名称”,用户应该能够识别它。但它仍然可能不是一个真正的文件名

我不能排除 Google Drive API 有一些方法可以从 ACTION_GET_CONTENT 获取到的 Uri 中获取显示名称,但这让我惊讶。如果你在你的 Intent 中添加 CATEGORY_OPENABLE,那么你从 ACTION_GET_CONTENT 获取到的 Uri 可能也能与 DocumentFile 一起使用。


在Kitkat中检查,创建了DocumentFile对象,但getName()方法返回null。我如何获取kitkat及以下版本的显示名称? - Rohan Patel
请检查上面的评论 - Rohan Patel
@RohanPatel:这可能是DocumentFile的限制。我在这个库中有一个更好的版本。或者,您可以使用ContentResolver自己查询OpenableColumns - CommonsWare
非常感谢Mark提供的fromSingleUri()技巧,对Google Drive文件有很大帮助! - 0101100101

3

0

实际上,我可以向您推荐两种方法:

第一种方法是自己命名文件并将其保存到手机中的另一个URI。

第二种方法是,您可以从URI本身获取文件名。请参见下面的答案:

链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接