我正在使用Xamarin.Forms PCL项目,我正在使用SignaturePad插件来捕获签名,我正在保存在内存流中,如:
var imageStream = await
signaturePad.GetImageStreamAsync(SignatureImageFormat.Png);
var signatureMemoryStream = new MemoryStream();
imageStream.CopyTo(signatureMemoryStream);
byte[] data = signatureMemoryStream.ToArray();
现在,我需要做的是将该签名图像附加到电子邮件中。因此,我正在使用Cross-Messaging NuGet插件,它允许我将图像附加到电子邮件中。所以,我需要一个Signature图像的路径。所以任何想法,我如何在我的本地Xamarin PCL共享项目路径中保存签名并获取图像的路径?
答案 0 :(得分:0)
将文件保存到设备是特定于设备的,因此您无法直接在PCL中执行此操作。你可以做的是使用依赖注入来调用你的Android和iOS项目来执行保存并返回标题。所以从你的代码中你可以打电话:
var filePath = DependencyService.Get<IPlatform>().SaveFile(fileBytes, fileName);
在您的PCL中定义:
public interface IPlatform
{
string SaveAndOpenFile(byte[] fileBytes, string fileName);
void DownloadFile(string url);
}
然后在你的android项目中你会做类似......的事情:
[assembly: Xamarin.Forms.Dependency(typeof(Platform))]
namespace MyApp.Droid.Classes
{
internal class Platform : IPlatform
{
public async void SaveAndOpenFile(byte[] fileBytes, string fileName)
{
var filePath = string.Empty;
try
{
// Write File
var directory = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
directory = Path.Combine(directory, Android.OS.Environment.DirectoryDownloads);
filePath = Path.Combine(directory, fileName);
File.WriteAllBytes(filePath, fileBytes);
return filePath
}
}
}
}
在iOS中类似:
[assembly: Xamarin.Forms.Dependency(typeof(Platform))]
namespace MyApp.iOS.Classes
{
internal class Platform : IPlatform
{
public void SaveAndOpenFile(byte[] fileBytes, string fileName)
{
}
}
}