在Android中以程序方式打开CSV文件

3
我已经通过程序编写了一个CSV文件,我希望用户可以使用其设备上已安装的应用程序打开这个CSV文件。
我有以下内容:
File file = new File(Environment.getExternalStorageDirectory(), "My_App_Dir/" + fileName);
Intent csvIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
csvIntent.addCategory(Intent.CATEGORY_OPENABLE);
csvIntent.setDataAndType(FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".provider", finalFile), "text/csv");
csvIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
csvIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startActivity(csvIntent);

当我运行以上代码时,我只看到最近文件浏览器(并不显示文件),而不是应用程序选择屏幕,允许用户选择要使用的应用程序来打开文件。
如果我进入我的设备文件浏览器应用程序(Solid Explorer)并选择该应用程序,它会为我提供支持CSV格式(Google文档或Excel)的应用程序列表。
1个回答

3
使用 ACTION_VIEWACTION_OPEN_DOCUMENT 相当于桌面操作系统或Web浏览器中的“文件打开”对话框。

谢谢,我已经尝试过了,但现在它抛出了一个ActivityNotFoundException异常。android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.OPENABLE] dat=content://com.my_company.my_app.provider/external_files/My_App_Dir/11042017_233342_resultset.csv typ=text/csv flg=0x10000001 } - Boardy
好的,我解决了,就像您做的那样,但是我需要删除addCategory(Intent.CATEGORY_OPENABLE)。感谢您的帮助。 - Boardy
@Boardy:哦,是的,对不起我没注意到那一点。ACTION_VIEW通常只与默认类别一起使用,而当你调用startActivity()方法时,默认类别会被添加进去。 - CommonsWare
这在API 15中不可用。你有其他的建议吗? - tiagocarvalho92
@tiagocarvalho92:我不知道“this”是什么。 ACTION_VIEW - 这是我在我的回答中推荐的,自API级别1以来就存在了。 - CommonsWare
你说得对,@CommonsWare,我是指ACTION_OPEN_DOCUMENT。 - tiagocarvalho92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接