从安卓保存csv.共享时文件为无标题



我正在使用java在android工作室中开发一个应用程序,该应用程序可以读取csv文件并最终将该文件导出回去。输出的csv文件被命名为Untitled.csv,但是我希望它保持它被读入程序的原始文件名。有没有办法做到这一点?请参阅下面的代码:

Uri path = Uri.parse(mypath);
Intent fileIntent = new Intent(Intent.ACTION_SEND);
fileIntent.setType("text/csv");
fileIntent.putExtra(Intent.EXTRA_SUBJECT, "Data");
fileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
fileIntent.putExtra(Intent.EXTRA_STREAM, path);
startActivity(Intent.createChooser(fileIntent, "Send data"));

其中"mypath"为"0/emulated/android/data/some_folder/backup_file_20191217.csv">

2019 年 12 月 20 日更新:我刚刚注意到,在某些设备上,该文件使用实际文件名正确命名,但在某些设备上,它被导出为无标题。我不知道为什么会这样。 如果有人知道这件事,我请你帮帮我。

2019 年 12 月 22 日更新:当我与其他应用程序共享时,我正确获取文件名,但是当我使用 whatsapp 共享时,文件名为无标题。现在,问题出在我的代码上?还是什么?

您可以尝试改用ACTION_SENDTO。这允许您提供一个实际的文件 URI,该 URI 可能被解释为文件而不是二进制流(应保留文件名(:

Uri path = Uri.parse(mypath);
Intent fileIntent = new Intent(Intent.ACTION_SENDTO);
fileIntent.setData(path);
fileIntent.setType("text/csv");
fileIntent.putExtra(Intent.EXTRA_SUBJECT, "Data");
fileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(fileIntent, "Send data"));

实际上,如果您只是在fileIntent.setType()之前添加fileIntent.setData()行,它也可以与您现有的代码一起使用(使用ACTION_SEND(。这一切都取决于进行共享的应用程序(即:不是您的应用程序(的行为。

最新更新