从google驱动器URI获取文件名

时间:2017-06-24 10:14:21

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

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

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

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

问题在于Google云端硬盘。如果用户从Google云端硬盘中选择图片,我会收到如下URI:content://com.google.android.apps.docs.storage.legacy/enc%3DHxtpLaMr66OMOzDOKTRZ-5ed7q7Szj7F7nC0IlxBnV8hx2P1%0A

我能够生成Bitmap但无法获取文件名。

 InputStream input = context.getContentResolver().openInputStream(uri);
               Bitmap bitmap = BitmapFactory
                        .decodeStream(input);

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

请帮我从google drive URI中提取图片名称。

3 个答案:

答案 0 :(得分:4)

  

我能够生成Bitmap但无法获取文件名

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

  

请帮我从google drive uri中提取图片名称。

这不是严格可能的。

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

我不能排除Google Drive API有一些方法可以从Uri获取ACTION_GET_CONTENT的显示名称,但这会让我感到惊讶。来自Uri的{​​{1}}也可以与ACTION_GET_CONTENT一起使用 - 如果您将DocumentFile添加到CATEGORY_OPENABLE,则会增加其工作的可能性

答案 1 :(得分:0)

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

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

第二种方式,你可以从uri本身获取文件名。请参阅以下答案:

Link

答案 2 :(得分:0)

使用Google(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));