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

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

那该怎么办呢?谢谢你的帮助。


BIG阳
浏览 884回答 2
2回答

暮色呼如

我正在取一个文件不是用那个密码。该代码要求用户选择一段内容。这可能是一个文件,也可能不是一个文件。根据许多线程,我应该使用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-这应该返回一个“显示名称”,用户应该可以识别该名称。

慕田峪9158850

你不需要。你打开一个InputStream所识别的内容。Uri在DocumentFile,而你以这种方式消费内容。
打开App,查看更多内容
随时随地看视频慕课网APP