我正在为Android和iOS应用程序使用xamarin.forms。在这里,我可以通过为应用程序创建个人文件夹来保存图像和文档。但是要求是下载图像/文档后,它应该自动打开,而无需手动进入该文件夹。对于Android和iOS,该怎么做。
保存图像/文档 对于Android:
byte[] respuesta = Android.Util.Base64.Decode(fileBytes, Android.Util.Base64.Default);
System.IO.File.WriteAllBytes(fileFullPath, respuesta);
在iOS中:
if (extension.ToLower() == ".pdf")
{
byte[] encodedDataAsBytes = DecodeUrlBase64(DataString);
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string finalPath = Path.Combine(documentsPath, Path.GetFileName(fileFullPath));
File.WriteAllBytes(finalPath, encodedDataAsBytes);
}
if(extension.ToLower() == ".png" || extension.ToLower() == ".jpg" || extension.ToLower() == ".jpeg" || extension.ToLower() == ".gif")
{
byte[] encodedDataAsBytes = System.Convert.FromBase64String(DataString);
NSData data = NSData.FromArray(encodedDataAsBytes);
var someImage= UIImage.LoadFromData(data);
someImage.SaveToPhotosAlbum((image, error) =>
{
var o = image as UIImage;
Console.WriteLine("error: " + error);
});
}
答案 0 :(得分:1)
在Android中:首先,您必须从存储在Android设备专用文件夹中的文件路径中获取文件。
File file = new File(getFilesDir().getAbsolutePath(), "fileName.png");
然后使用它,您已将其转换为如下所示的URI路径。
Uri contentUri = FileProvider.getUriForFile(DownloadShareActivity.this, SHARED_PROVIDER_AUTHORITY, file);
答案 1 :(得分:0)
您可以使用DependencyService
获取一个字节数组,以将其显示在图像控件中,如下所示:
在您的核心项目中:
public interface IGetBytesImagesService
{
byte[] GetBytes(string path);
}
在您的Android项目中:
[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
public async byte[] GetBytes(string path)
{
return File.ReadAllBytes(filePath);;
}
}
在您的iOS项目中:
[assembly: Dependency(typeof(GetBytesImagesService))]
public class GetBytesImagesService : IGetBytesImagesService
{
public async byte[] GetBytes()
{
return File.ReadAllBytes(filePath);
}
}
现在,在您的xaml.cs
文件中,您可以将字节数组设置为Image.Source
,如下所示:
var stream = new MemoryStream(DependencyService.Get<IGetBytesImagesService>().GetBytes(filePath));
yourImage.Source = ImageSource.FromStream(() => stream);