我使用此代码允许用户从其存储中选择多个.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;
}
}
这是从结果中获取所有相关Uris的正确方法吗?如果用户选择一个文件,我会从data.getData()获取Uri,如果用户选择了多个文件,那么它会直接转到这个clipData()。
假设(1)是正确的,我如何获取用户选择的相应文件的文件名?例如“chosen_file.csv”(我不是要求路径)。
答案 0 :(得分:1)
这是从结果中获取所有相关Uris的正确方法吗?
AFAIK,是的。最少,它对我有用。
如何获取用户选择的相应文件的文件名?
严格来说,你不是。 Uri
无需指向文件,只需将此网页的URL指向文件即可。
可以做的是将Uri
包裹在DocumentFile
,via fromSingleUri()
中。然后,在getName()
上拨打DocumentFile
以获取&#34;显示名称&#34;对于内容。根据用户从中获取内容的位置,此可能是类似文件名的值。它应该是用户可识别的东西。但是,不要假设它是文件名,因为它可能是其他东西。