93 lines
2.7 KiB
C#
Executable File
93 lines
2.7 KiB
C#
Executable File
using System.Threading.Tasks;
|
|
using Xamarin.Forms;
|
|
#if __IOS__
|
|
using UIKit;
|
|
using Xamarin.Forms.Platform.iOS;
|
|
#elif __ANDROID__
|
|
using Android.Content;
|
|
using Android.Net;
|
|
using System.IO;
|
|
using System.Linq;
|
|
#endif
|
|
|
|
namespace Gallery.Utils
|
|
{
|
|
public class FileStore
|
|
{
|
|
#if __IOS__
|
|
public static Task<string> SaveVideoToGalleryAsync(string file)
|
|
{
|
|
var task = new TaskCompletionSource<string>();
|
|
if (UIVideo.IsCompatibleWithSavedPhotosAlbum(file))
|
|
{
|
|
UIVideo.SaveToPhotosAlbum(file, (path, err) =>
|
|
{
|
|
task.SetResult(err?.ToString());
|
|
});
|
|
}
|
|
return task.Task;
|
|
}
|
|
#endif
|
|
|
|
public static Task<string> SaveImageToGalleryAsync(ImageSource image)
|
|
{
|
|
#if __IOS__
|
|
IImageSourceHandler renderer;
|
|
if (image is UriImageSource)
|
|
{
|
|
renderer = new ImageLoaderSourceHandler();
|
|
}
|
|
else if (image is FileImageSource)
|
|
{
|
|
renderer = new FileImageSourceHandler();
|
|
}
|
|
else
|
|
{
|
|
renderer = new StreamImagesourceHandler();
|
|
}
|
|
var photo = renderer.LoadImageAsync(image).Result;
|
|
|
|
var task = new TaskCompletionSource<string>();
|
|
if (photo == null)
|
|
{
|
|
task.SetResult(null);
|
|
}
|
|
else
|
|
{
|
|
photo.SaveToPhotosAlbum((img, error) =>
|
|
{
|
|
task.SetResult(error?.ToString());
|
|
});
|
|
}
|
|
return task.Task;
|
|
#elif __ANDROID__
|
|
Java.IO.File camera;
|
|
|
|
var dirs = Droid.MainActivity.Main.GetExternalMediaDirs();
|
|
camera = dirs.FirstOrDefault();
|
|
if (camera == null)
|
|
{
|
|
camera = Droid.MainActivity.Main.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures);
|
|
}
|
|
if (!camera.Exists())
|
|
{
|
|
camera.Mkdirs();
|
|
}
|
|
var original = ((FileImageSource)image).File;
|
|
var filename = Path.GetFileName(original);
|
|
var imgFile = new Java.IO.File(camera, filename).AbsolutePath;
|
|
File.Copy(original, imgFile);
|
|
|
|
var uri = Uri.FromFile(new Java.IO.File(imgFile));
|
|
var intent = new Intent(Intent.ActionMediaScannerScanFile);
|
|
intent.SetData(uri);
|
|
Droid.MainActivity.Main.SendBroadcast(intent);
|
|
|
|
var task = new TaskCompletionSource<string>();
|
|
task.SetResult(null);
|
|
return task.Task;
|
|
#endif
|
|
}
|
|
}
|
|
}
|