我的应用程序可以将几种不同类型的数据导出为JSON文件,然后用户可以备份或共享这些文件并重新导入它们。我使用不同的文件扩展名来指示文件中的数据类型。我正在使用以下代码通过Android的内置文件管理器进行导出:
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TITLE, layoutName + ".layout");
this.startActivityForResult(intent, R.id.fileManager);
然后将其导入:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/plain");
this.startActivityForResult(intent, R.id.fileManager);
当我将文件保存到Google云端硬盘之类的云提供商时,一切正常。但是,当我将文件保存到本地目录时,Android添加了.txt文件扩展名-因此生成的文件名为MyLayout.layout.txt。有什么办法可以阻止这种情况?
我尝试了不同的MIME类型。如果我使用text / json,则Android不会添加.txt扩展名,并且该应用可以导入使用该MIME类型导出的文件,但会显示以text / plain导出的较旧文件-以及从iOS版本-尝试导入它们时无法打开。如果我使用更通用的类型(例如application / octet-stream或* / *),Android不会添加文件扩展名,但会将文件标记为二进制文件并显示为无法打开。
是否可以更改导出意图的设置以禁止添加该额外的文件扩展名?还是有其他技巧可以避免这种情况?
更新
我尝试在导出完成后从内容提供者URI获取路径,然后重命名文件以删除.txt扩展名。它仅在某些本地目录中有效,并且随Android版本的不同而不同,即使它起作用了,重命名的文件也无法导入。布莱克作为一种解决方法,我将保留.txt扩展名并更新iOS版本,以接受具有该扩展名的文件以实现互操作性。