为了账号安全,请及时绑定邮箱和手机立即绑定

onActivityResult的intent.getPath()没有给出正确的文件名

onActivityResult的intent.getPath()没有给出正确的文件名

BIG阳 2019-07-11 10:50:14
onActivityResult的intent.getPath()没有给出正确的文件名我试图以这种方式获取一个文件:final Intent chooseFileIntent = new Intent(Intent.ACTION_GET_CONTENT);     String[] mimetypes = {"application/pdf"};     chooseFileIntent.setType("*/*");     chooseFileIntent.addCategory(Intent.CATEGORY_OPENABLE);     if (chooseFileIntent.resolveActivity(activity                             .getApplicationContext().getPackageManager()) != null) {         chooseFileIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);         activity.startActivityForResult(chooseFileIntent, Uploader.PDF);     }然后进去onActivityResult :@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {     super.onActivityResult(requestCode, resultCode, data);}根据许多线程,我应该从意图中获取文件名data.getData().getPath(),我期望的文件名是myfile.pdf相反,我得到了这个:/Document/acc=1;doc=28那该怎么办呢?谢谢你的帮助。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

我正在取一个文件

不是用那个密码。该代码要求用户选择一段内容。这可能是一个文件,也可能不是一个文件。

根据许多线程,我应该使用data.getData().getPath()从意图中获取文件名。

这从来都不是正确的,尽管它倾向于在较旧版本的Android上工作。

那该怎么办呢?

那得看情况了。

如果希望只接受文件,请集成文件选择器库而不是使用ACTION_GET_CONTENT. (更新2019-04-06:由于AndroidQ禁止大多数文件系统访问,此解决方案不再实用)

如果您愿意允许用户使用ACTION_GET_CONTENT,请理解,它不必是文件,也不需要有类似文件名的东西。你能得到的最接近的:

  • 如果getScheme().的.Uri回报file,您的原始算法将起作用。

  • 如果getScheme().的.Uri回报content,使用DocumentFile.fromSingleUri()若要创建一个DocumentFile,然后打电话getName()在这个问题上DocumentFile-这应该返回一个“显示名称”,用户应该可以识别该名称。


查看完整回答
反对 回复 2019-07-11
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

你不需要。你打开一个InputStream所识别的内容。UriDocumentFile,而你以这种方式消费内容。

查看完整回答
反对 回复 2019-07-11
  • 2 回答
  • 0 关注
  • 883 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信