【问题标题】:Save file with custom extension using CreateChooser on Xamarin Android在 Xamarin Android 上使用 CreateChooser 保存具有自定义扩展名的文件
【发布时间】:2022-11-03 16:52:01
【问题描述】:

我必须要求用户选择一个位置并使用自定义扩展名 (.tdr) 保存文件。我已将 intent.SetType 设置为 */*,目前我必须保存没有任何扩展名的文件。谁能帮我解决我的问题?

这是我的代码示例

            Intent intent = new Intent();
                intent.SetType("*/*");
                intent.PutExtra(Intent.ExtraAllowMultiple, false);
                intent.SetAction(Intent.ActionCreateDocument);
                MainActivity.Instance.persistentStorageService.Write("DataToWrite", projectJson);
                MainActivity.Instance.StartActivityForResult(Intent.CreateChooser(intent, "Save TRW Project File"), RequestCodeConstants.FilePickerSaveRequestCode);

在 MainActivity.cs

System.IO.Stream output = ContentResolver.OpenOutputStream(data.Data);
                            var dataToWrite = persistentStorageService.Read("DataToWrite", typeof(string));
                            var buffer = Encoding.ASCII.GetBytes((string)dataToWrite);
                            output.Write(buffer, 0, buffer.Length);
                            output.Close();
                            result = buffer;

我想以自定义扩展名保存文件。

【问题讨论】:

  • 什么样的数据存储在您的文件中?
  • @FreakyAli 文件包含一个长 JSON 字符串
  • 所以你总是必须创建一个带有“x”名称和“.tdr”扩展名的新文件,对吧?
  • @FreakyAli 正确。
  • @FreakyAli 我们可以使用 ExtraTitle 传递扩展名,但用户可以在为文件命名时将其删除。如果有像使用 SetType("application/pdf") 保存 pdf 的方法会更好

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

问题是您的 MimeType,它需要设置为自定义文件类型的八位字节:

intent.SetType("application/octet");

一旦你这样做了,你需要做的就是 StartActivityForResult ,你就完成了。

Activity.StartActivityForResult(intent, resultCode);

确保您的扩展名类型是文件名本身的一部分,您也可以通过意图分配它

intent.PutExtra(Intent.ExtraTitle, fileName);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2016-11-12
    相关资源
    最近更新 更多