【问题标题】:Get filename from google drive URI从谷歌驱动器 URI 获取文件名
【发布时间】:2017-11-27 20:28:09
【问题描述】:

在我的应用中,用户可以从相机和图库中选择图像以加载到 ImageView 中。

我正在使用以下代码打开相关应用程序以选择图像:

 Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

问题出在 Google 驱动器上。如果用户从 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);

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

请帮我从谷歌驱动器 URI 中提取图像名称。

【问题讨论】:

  • 您找到解决方案了吗?

标签: android google-drive-api android-imageview android-bitmap google-drive-android-api


【解决方案1】:

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

不必成为文件名。并非每个字节序列都有一个文件名。例如,此答案没有文件名。

请帮我从谷歌驱动器 uri 中提取图像名称。

这在严格意义上是不可能的。

您可以切换到ACTION_OPEN_DOCUMENT。然后,将生成的Uri 包装在a DocumentFile using fromSingleUri() 中。然后,拨打DocumentFile 上的getName()。这将是一个“显示名称”,用户应该能够识别。 它仍然可能不是文件名

我不能排除 Google Drive API 有一些方法可以从 Uri 获取显示名称,而您可以从 ACTION_GET_CONTENT 获取显示名称,尽管这会让我感到惊讶。您的Uri 来自ACTION_GET_CONTENT 也有可能与DocumentFile 一起使用——如果您将CATEGORY_OPENABLE 添加到您的Intent 中,它会增加这种方法有效的几率。

【讨论】:

  • 在 Kitkat 中检查,正在创建 DocumentFile 对象,但 getName() 方法返回 null。如何获得显示名称 kitkat 及以下?
  • - 检查上面的评论
  • @RohanPatel:这可能是DocumentFile 的限制。我有a better version in this library。或者,您可以使用ContentResolver 自己为OpenableColumns query()
  • 非常感谢 Mark 的 fromSingleUri() 提示,对 Google Drive 文件有帮助!
【解决方案2】:

使用谷歌提供和推荐的方式(https://developer.android.com/guide/topics/providers/document-provider):

Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null, null);
if (cursor != null && cursor.moveToFirst())
  String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));

【讨论】:

    【解决方案3】:

    其实我可以推荐你两种方式:

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

    第二种方式,您可以从 uri 本身获取文件名。请看下面的答案:

    Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2022-01-07
      • 2020-01-04
      相关资源
      最近更新 更多