【问题标题】:How to access to asset file of android in a xamarin forms project from my view model class?如何从我的视图模型类访问 xamarin 表单项目中的 android 资产文件?
【发布时间】:2021-05-02 08:52:29
【问题描述】:
我有一个 xamarin 表单解决方案,我有 3 个项目,xamarin 表单项目、android 项目和 iOS 项目。我的 andoird 项目的 assets 文件夹中有一个文件,我想将此文件从 assets 复制到个人文件夹,以便进行编辑。
我读过的一些地方可以使用 AssetManager,但是尽管我在 xamarin 表单项目的视图模型中使用了 Xamarin.Forms,但我无法访问 Xamarin.Forms.Context,这似乎成为可以使用资产的方式。
那么我如何将文件从资产文件夹复制到我的视图模型中的个人文件夹?
谢谢。
【问题讨论】:
标签:
xamarin
xamarin.forms
【解决方案1】:
你可以使用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, 0, b)) > 0)
{
await fileStream.WriteAsync(buffer, 0, length);
}
fileStream.Flush();
fileStream.Close();
fileAssetStream.Close();
}
}
catch (Exception ex)
{
//Handle exceptions
}
}
}
}
3.在您的表单项目中调用它,例如:
DependencyService.Get<ISaveFileService>().SaveFile();