【发布时间】:2021-11-24 09:37:12
【问题描述】:
我有一个执行两个任务的函数:
- 在数据/文件上创建一个 CSV 文件
- 在电子邮件中附加文件
数据是从 REST API 原始接收的。 这是我的功能:
private void writeCSV(String data, int year) {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getActivity().openFileOutput(year+"_Report.csv",
Context.MODE_PRIVATE), StandardCharsets.UTF_8);
outputStreamWriter.write(data);
outputStreamWriter.close();
File file=new File(requireActivity().getFilesDir(),year+"_Report.csv");
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Title"));
Uri uri = FileProvider.getUriForFile(requireActivity(),"FileProvider",
file);
shareIntent.setDataAndType(uri,"application/vnd.ms-excel");
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent chooser = Intent.createChooser(shareIntent, "Choose mail"));
List<ResolveInfo> resInfoList = getActivity().getPackageManager().queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
getActivity().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
startActivity(chooser);
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
}
问题
我遇到的问题是 CSV 在设备文件资源管理器和电子邮件预览(即 Gmail)上是可读的,但是当我尝试在 Excel 上打开文件时,所有文本的编码都不正确(非拉丁文单词只是符号)。
提前谢谢你
【问题讨论】:
-
application/vnd.ms-excel不是 CSV 的 MIME 类型。试试text/csv。 -
@CommonsWare 似乎没有解决问题
标签: android css android-fragments android-intent android-fileprovider