微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从我的视图模型类访问 xamarin 表单项目中 android 的资产文件?

如何解决如何从我的视图模型类访问 xamarin 表单项目中 android 的资产文件?

我有一个 xamarin 表单解决方案,其中我有 3 个项目,xamarin 表单项目、android 项目和 iOS 项目。我的 andoird 项目的资产文件夹中有一个文件,我想将此文件从资产复制到个人文件夹,以便我可以对其进行编辑。

我读过一些地方说我可以使用 AssetManager,但是虽然我在 xamarin 表单项目的视图模型中使用了 Xamarin.Forms,但我无权访问 Xamarin.Forms.Context,这似乎是成为处理资产的方式。

那么如何将文件从资产文件夹复制到我的视图模型中的个人文件夹?

谢谢。

解决方法

您可以使用 DependencyService

1.创建接口

public interface ISaveFileService
{
   void SaveFile();
}

2.实现各个平台的接口(例如android)

在android项目中(可能需要请求一些权限):

public class SaveFileService : ISaveFileService
{
    public SaveFile()
    {
        var filPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),"YOUR_DATABASENAME");

        if (!File.Exists(filPath))
        {
            try
            {
                using (var fileAssetStream = Android.App.Application.Context.Assets.Open("your file"))
                using (var fileStream = new FileStream(filPath,FileMode.OpenOrCreate))
                {
                    var buffer = new byte[1024];

                    int b = buffer.Length;
                    int length;

                    while ((length = await fileAssetStream.ReadAsync(buffer,b)) > 0)
                    {
                        await fileStream.WriteAsync(buffer,length);
                    }

                    fileStream.Flush();
                    fileStream.Close();
                    fileAssetStream.Close();
                }
            }
            catch (Exception ex)
            {
                //Handle exceptions
            }
        }
    }
}

3.在您的表单项目中调用它,例如:

DependencyService.Get<ISaveFileService>().SaveFile();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。