从 onActivityResult Intent 获取一个或多个文件及其文件名?
Getting one or more files from onActivityResult Intent, and their filenames?
我使用此代码允许用户从他们的存储中select 多个 .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" (我不是要路径)。
Is this the right way to get all the relevant Uris from the result?
据我所知,是的。至少,它对我有用。
how do I get the filenames of the corresponding files that the user chose?
严格来说,你没有。没有要求 Uri
指向文件,正如此网页的 URL 必须指向文件一样。
您 可以 做的是将 Uri
包装在 DocumentFile
、via fromSingleUri()
中。然后,在 DocumentFile
上调用 getName()
以获得内容的 "display name"。根据用户从何处获取内容,此 可能 是一个类似文件名的值。它应该是用户可识别的东西。但是,不要假设它是文件名,因为它可能是其他名称。
我使用此代码允许用户从他们的存储中select 多个 .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" (我不是要路径)。
Is this the right way to get all the relevant Uris from the result?
据我所知,是的。至少,它对我有用。
how do I get the filenames of the corresponding files that the user chose?
严格来说,你没有。没有要求 Uri
指向文件,正如此网页的 URL 必须指向文件一样。
您 可以 做的是将 Uri
包装在 DocumentFile
、via fromSingleUri()
中。然后,在 DocumentFile
上调用 getName()
以获得内容的 "display name"。根据用户从何处获取内容,此 可能 是一个类似文件名的值。它应该是用户可识别的东西。但是,不要假设它是文件名,因为它可能是其他名称。