Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 试图让用户将.csv文件导入我的应用程序_Android_File_Csv_Android Intent_Import - Fatal编程技术网

Android 试图让用户将.csv文件导入我的应用程序

Android 试图让用户将.csv文件导入我的应用程序,android,file,csv,android-intent,import,Android,File,Csv,Android Intent,Import,当您想要导出.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"}; s

当您想要导出.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、Email、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
然而,这只会带来一个选择者说,没有应用程序可以完成这项任务,这让我感到困惑

如果我删除额外的\u ALLOW\u MULTIPLE行,则会得到两个结果:

如果我从模拟器运行应用程序,它会进入文件浏览器,在那里我可以选择单个文件。据我所知,这是可行的,但不允许我选择多个文件

如果我从我的物理手机上运行应用程序,它不会打开文件资源管理器-它让我可以选择从DropBox或其他一些不相关的应用程序导入

为什么不允许使用文件资源管理器?为什么它不允许像谷歌驱动器这样的其他选项呢?是否真的没有将多个文件导入应用程序的服务?它是否只在找不到任何其他应用程序调用时才提供文件资源管理器

我在这里的最终目标基本上是用选择器提示用户,让他们从外部应用程序(如DropBox)或通过文件浏览器从自己的文件系统中选择一个或多个.csv文件

还是我的代码错了

我该怎么办?Android文档对此没有帮助


编辑:我的模拟器手机是Galaxy Nexus API 23和Nexus 5 API 22。我的物理手机是三星Galaxy Note 4 6.0.1版。

以下内容适合我

receiveIntent.setType("*/*");
String[] mimetypes = {"text/csv", "text/comma-separated-values", "application/csv"};
receiveIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);

由于setType没有文档化以支持管道分隔的列表,请更改两个`setType`调用以提供单个MIME类型,然后看看这是否有帮助。@Commonware的问题是我不知道哪一个是正确的。大多数在线答案都说使用text/csv,但在文件浏览器中,csv文件会变灰。我只能在出于某种原因使用文本/逗号分隔的值时选择它们。但由于text/csv在其他地方都被使用,我想我会尝试将这三个都包括在内。问题是我不知道哪一个是正确的,选择一个。我会尝试将这三个都包括在内——也就是说,对于Android 4.4+,比如receiveIntent.setTypetext/逗号分隔值;然后字符串[]mimetypes={text/csv,text/逗号分隔值,application/csv};然后是receiveIntent.putExtraIntent.EXTRA_MIME_类型,mimetypes?现在进行测试,如果我只使用一种类型,那么无论我在物理设备上使用text/csv、text/逗号分隔值还是application/csv,结果都是一样的。