我们在应用程序中使用了漂亮的MvvmCross框架,我们还利用FilePlugin以跨平台的方式处理文件系统。
默认情况下,FilePlugin会将数据存储在某个默认位置,例如Android中的/data/data/<appname>
。
但是,如果我想存储大型文件,如视频或3D模型,该怎么办?在iOS中,您将所有内容存储在应用程序文件夹中,但在Android中,您可能希望将文件存储在SD卡上。
您会为此用例推荐什么解决方案? 我的意思是,我应该继承FilePlugin并以某种方式覆盖Android的app根目录吗?
答案 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>();
这对我来说很好。