You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:50:28