如果你想导出一个.csv,我写完这段代码后就可以了:
Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendIntent.setType("text/csv|text/comma-separated-values|application/csv");
String[] mimetypes = {"text/csv", "text/comma-separated-values", "application/csv"};
sendIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, arrayListOfUris);
startActivity(Intent.createChooser(sendIntent, "Export CSV"));
当您运行此代码时,它会显示一个小的选择器对话框,您可以将文件导出到GMail,电子邮件,Android Beam,DropBox,Google Drive等。它似乎可以正常处理多个文件。
然而,尝试完成反向(接收多个.csv文件)已被证明是非常非常困难的。而且我已经读了这么多StackOverflow线程,他们已经过时了,或者他们实际上并没有解决问题。
我一直在尝试这个:
Intent receiveIntent = new Intent(Intent.ACTION_GET_CONTENT);
receiveIntent.setType("text/csv|text/comma-separated-values|application/csv");
String[] mimetypes = {"text/csv", "text/comma-separated-values", "application/csv"};
receiveIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
intent.addCategory(Intent.EXTRA_ALLOW_MULTIPLE);
startActivityForResult(Intent.createChooser(receiveIntent, "Import CSV"), REQUEST_IMPORT_CSV); //REQUEST_IMPORT_CSV is just an int representing a request code for the activity result callback later
然而,这只会产生一个选择器,表示没有可以完成此任务的应用程序,我觉得这令人困惑。
如果我删除了EXTRA_ALLOW_MULTIPLE
行,那么我会得到两个结果:
如果我从模拟器运行应用程序,它会转到文件资源管理器,我可以在其中选择单个文件。据我所知,这是有效的,但不允许我选择多个文件。
如果我从我的手机上运行该应用程序,它不会打开文件浏览器 - 它让我可以选择从DropBox或其他一些非常相关的应用程序导入。
为什么它不允许文件浏览器?为什么它不允许像Google云端硬盘这样的其他选项呢?是否真的没有将多个文件导入您的应用程序的服务?当它无法找到任何其他要调用的应用程序时,它是否只为您提供文件浏览器?
我的最终目标是基本上向用户提示一个选择器,让他们从DropBox等外部应用程序中选择一个或多个.csv文件,或者通过文件浏览器从他们自己的文件系统中选择。
或者我的代码错了?
我该怎么办? Android文档没有提供任何帮助。
编辑:我的模拟器手机是Galaxy Nexus API 23和Nexus 5 API 22.我的手机是三星Galaxy Note 4(版本6.0.1)。
答案 0 :(得分:0)
以下对我有用的
receiveIntent.setType("*/*");
String[] mimetypes = {"text/csv", "text/comma-separated-values", "application/csv"};
receiveIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);