Xamarin Android中用CreateChooser保存自定义.tdr扩展名文件的问题
解决自定义扩展名.tdr文件保存问题
核心修改点:原代码中intent.SetType("*/*")会导致系统无法自动关联自定义扩展名,需通过以下调整强制添加.tdr后缀:
1. 调整Intent配置
替换原Intent的类型设置,同时预设带扩展名的文件名,确保保存时默认带.tdr:
Intent intent = new Intent(Intent.ActionCreateDocument); // 设置通用二进制MIME类型,适配多数文件保存场景 intent.SetType("application/octet-stream"); // 预设带.tdr扩展名的文件名,引导用户保留后缀 intent.PutExtra(Intent.ExtraTitle, "project.tdr"); intent.PutExtra(Intent.ExtraAllowMultiple, false); // 可选:添加自定义MIME类型,帮助系统识别.tdr文件 intent.PutExtra(Intent.ExtraMimeType, "application/x-tdr"); MainActivity.Instance.persistentStorageService.Write("DataToWrite", projectJson); MainActivity.Instance.StartActivityForResult(Intent.CreateChooser(intent, "Save TRW Project File"), RequestCodeConstants.FilePickerSaveRequestCode);
2. 优化写入逻辑(可选)
将原写入代码中的ASCII编码改为UTF-8,避免中文乱码,同时用using自动释放流:
using (System.IO.Stream output = ContentResolver.OpenOutputStream(data.Data)) { var dataToWrite = persistentStorageService.Read("DataToWrite", typeof(string)) as string; var buffer = Encoding.UTF8.GetBytes(dataToWrite); output.Write(buffer, 0, buffer.Length); result = buffer; }
额外提示
- 部分文件管理器允许用户修改扩展名,若需强制确保后缀为.tdr,可在
OnActivityResult中检查返回Uri对应的文件名,若无.tdr则提示用户(需注意权限限制) - 若要让系统更精准识别.tdr类型,可在AndroidManifest中注册自定义MIME类型,但保存场景下预设文件名已足够解决问题
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

