MvvmCross FilePlugin将文件保存到SD卡

时间:2015-03-28 15:21:18

标签: android xamarin xamarin.android mvvmcross

我们在应用程序中使用了漂亮的MvvmCross框架,我们还利用FilePlugin以跨平台的方式处理文件系统。

默认情况下,FilePlugin会将数据存储在某个默认位置,例如Android中的/data/data/<appname>。 但是,如果我想存储大型文件,如视频或3D模型,该怎么办?在iOS中,您将所有内容存储在应用程序文件夹中,但在Android中,您可能希望将文件存储在SD卡上。

您会为此用例推荐什么解决方案? 我的意思是,我应该继承FilePlugin并以某种方式覆盖Android的app根目录吗?

1 个答案:

答案 0 :(得分:3)

我讨厌同样的问题,并通过创建我自己的IMvxFileStore实现来解决它。我的实现允许我指定绝对路径。

internal class CustomMvxAndroidFileStore : MvxFileStore
{
    private Context _context;

    private Context Context
    {
        get
        {
            if (_context == null)
            {
                _context = Mvx.Resolve<IMvxAndroidGlobals>().ApplicationContext;
            }
            return _context;
        }
    }

    protected override string FullPath(string path)
    {
        if (PathIsAbsolute(path)) return path;

        return Path.Combine(Context.FilesDir.Path, path);
    }

    private bool PathIsAbsolute(string path)
    {
        return path.StartsWith("/");
    }
}

然后在安装应用程序时注入它:

Mvx.RegisterType<IMvxFileStore, CustomMvxAndroidFileStore>();

这对我来说很好。