1

在我的应用程序中,用户可以从相机和图库中选择图像加载到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中提取图像名称。

回答

0

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

第一种方式是自己该名称的文件并将其保存到另一个URI的电话。

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

Link

3

我能够生成位图,但无法获取文件名

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

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

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

我不能排除Google Drive API有可能从Uri获取显示名称的可能性,您可以从ACTION_GET_CONTENT获得显示名称,但这会让我感到意外。如果您将CATEGORY_OPENABLE添加到您的Intent,也有可能您的UriACTION_GET_CONTENT将与DocumentFile —一起使用,它会增加这种情况的可能性。

+0

签入Kitkat,DocumentFile对象正在创建,但getName()方法返回null。我怎样才能得到显示名称kitkat及以下? –

+0

- 检查以上评论 –

+0

@RohanPatel:这可能是一个'DocumentFile'限制。我[这个库中有一个更好的版本](https://github.com/commonsguy/cwac-document)。或者,您可以使用'ContentResolver''自己查询'OpenableColumns'。 – CommonsWare

相关问题