Solución:
Crear una interfaz FileService
en su código compartido, cree una nueva interfaz, por ejemplo, llamada IFileService.cs
public interface IFileService
{
void SavePicture(string name, Stream data, string location="temp");
}
Implementación Android
En su proyecto de Android, cree una nueva clase llamada “Fileservice.cs”.
Asegúrese de que se derive de su interfaz creada antes y decórelo con la información de dependencia:
[assembly: Dependency(typeof(FileService))]
namespace MyApp.Droid
{
public class FileService : IFileService
{
public void SavePicture(string name, Stream data, string location = "temp")
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
documentsPath = Path.Combine(documentsPath, "Orders", location);
Directory.CreateDirectory(documentsPath);
string filePath = Path.Combine(documentsPath, name);
byte[] bArray = new byte[data.Length];
using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
{
using (data)
{
data.Read(bArray, 0, (int)data.Length);
}
int length = bArray.Length;
fs.Write(bArray, 0, length);
}
}
}
}
Implementación iOS
La implementación para iOS es básicamente la misma:
[assembly: Dependency(typeof(FileService))]
namespace MyApp.iOS
{
public class FileService: IFileService
{
public void SavePicture(string name, Stream data, string location = "temp")
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
documentsPath = Path.Combine(documentsPath, "Orders", location);
Directory.CreateDirectory(documentsPath);
string filePath = Path.Combine(documentsPath, name);
byte[] bArray = new byte[data.Length];
using (FileStream fs = new FileStream(filePath , FileMode.OpenOrCreate))
{
using (data)
{
data.Read(bArray, 0, (int)data.Length);
}
int length = bArray.Length;
fs.Write(bArray, 0, length);
}
}
}
}
Para guardar su archivo, en su código compartido, llame
DependencyService.Get<IFileService>().SavePicture("ImageName.jpg", imageData, "imagesFolder");
y debería estar listo para empezar.
public void DownloadImage(string URL)
{
var webClient = new WebClient();
webClient.DownloadDataCompleted += (s, e) =>
{
byte[] bytes = new byte[e.Result.Length];
bytes=e.Result; // get the downloaded data
string documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;
var partedURL = URL.Split("https://foroayuda.es/");
string localFilename = partedURL[partedURL.Length-1];
string localPath = System.IO.Path.Combine(documentsPath, localFilename);
File.WriteAllBytes(localPath, bytes); // writes to local storage
Application.Current.MainPage.IsBusy = false;
Application.Current.MainPage.DisplayAlert("Download", "Download Finished", "OK");
MediaScannerConnection.ScanFile(Forms.Context,new string[] { localPath }, null, null);
};
var url = new Uri(URL);
webClient.DownloadDataAsync(url);
}
Aquí debe usar el servicio de dependencia de xamarin forms PCL para llamar a este método desde el proyecto de Android. Esto almacenará su imagen en la carpeta pública. Editaré esto si tengo tiempo para hacer una demostración con iOS también.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)