从onActivityResult Intent获取一个或多个文件及其文件名?

时间:2016-10-16 22:15:22

标签: android file csv android-intent filesystems

我使用此代码允许用户从其存储中选择多个.csv文件:

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("text/comma-separated-values");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(Intent.createChooser(intent, "Get CSV Files"), REQUEST_IMPORT_CSV);

选择文件后,它会转到onActivityResult(),到目前为止我已经完成了:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_IMPORT_CSV:
            if (data != null) {
                ClipData clipData = data.getClipData();
                ArrayList<Uri> csvUris = new ArrayList<>();
                if (clipData != null) {
                    for (int i = 0; i < clipData.getItemCount(); i++) {
                        clipData.getItemAt(i).getText()
                        csvUris.add(clipData.getItemAt(i).getUri());
                    }
                }
                else {
                    csvUris.add(data.getData());
                }

            }
            break;
    }
}
  1. 这是从结果中获取所有相关Uris的正确方法吗?如果用户选择一个文件,我会从data.getData()获取Uri,如果用户选择了多个文件,那么它会直接转到这个clipData()。

  2. 假设(1)是正确的,我如何获取用户选择的相应文件的文件名?例如“chosen_file.csv”(我不是要求路径)。

1 个答案:

答案 0 :(得分:1)

  

这是从结果中获取所有相关Uris的正确方法吗?

AFAIK,是的。最少,它对我有用。

  

如何获取用户选择的相应文件的文件名?

严格来说,你不是。 Uri无需指向文件,只需将此网页的URL指向文件即可。

可以做的是将Uri包裹在DocumentFilevia fromSingleUri()中。然后,在getName()上拨打DocumentFile以获取&#34;显示名称&#34;对于内容。根据用户从中获取内容的位置,此可能是类似文件名的值。它应该是用户可识别的东西。但是,不要假设它是文件名,因为它可能是其他东西。