#c# #android #xamarin #xamarin.forms #xamarin.android
Вопрос:
Как сохранить фотографию в папке галереи? Я использую вырезку изображений.Формы.Исправление.v2 и Xam.Носитель.Плагин
код работает нормально, но он сохраняется в расположении: /данные/пользователь/0/com.имя компании.имя проекта/кэш/обрезанный 3243.png
я хочу сохранить его в папке галереи. как я могу это сделать?
protected async void TapGestureRecognizerCommand(object sender, EventArgs e)
{
await CrossMedia.Current.Initialize();
ImageSource TempimageFile = null;
new ImageCropper()
{
PageTitle = "Crop Photo",
AspectRatioX = 3, //
CropShape = ImageCropper.CropShapeType.Rectangle, //Cropt shape
SelectSourceTitle = "Select source", // Pop up Title
TakePhotoTitle = "Take Photo", // Popup - 1st option
PhotoLibraryTitle = "Photo Library", //Popup - 2nd option
Success = (imageFile) =>
{
Device.BeginInvokeOnMainThread(() =>
{
TempimageFile = ImageSource.FromFile(imageFile);
DisplayAlert("test", "te: " TempimageFile, "OK");
ImageURL.Source = TempimageFile;
});
}
}.Show(this);
}
Комментарии:
1. похоже, что в плагине нет возможности сделать это
2. На устройстве Android нет папки «Галерея»
3. @джейсон, я могу сохранить в галерее, используя Xam.Media. Только плагин, но у него нет опции обрезки… Вырезка изображений. Forms.Fix.v2 имеет опцию обрезки, но не сохраняет в галерее
4. есть идеи, как я могу это сделать? может быть, другой плагин? любые ссылки на ссылки были бы полезны
5. это плагин с открытым исходным кодом, измените его, чтобы он делал то, что вы хотите, и отправьте PR
Ответ №1:
Например,вы можете использовать DependencyService для вызова метода natvie, чтобы сохранить его в системном фотоальбоме.
создайте интерфейс в своем проекте форм:
public interface ISaveToGallery
{
void Save(string filePath,string fileName);
}
тогда в вашем Android-проекте:
class SaveToGallery: ISaveToGallery
{
public void Save(string filePath, string fileName)
{
MediaStore.Images.Media.InsertImage(Android.App.Application.Context.ContentResolver,
filePath, fileName, null);
}
}
назовем это так:
protected async void TapGestureRecognizerCommand(object sender, EventArgs e)
{
await CrossMedia.Current.Initialize();
ImageSource TempimageFile = null;
new ImageCropper()
{
PageTitle = "Crop Photo",
AspectRatioX = 3, //
CropShape = ImageCropper.CropShapeType.Rectangle, //Cropt shape
SelectSourceTitle = "Select source", // Pop up Title
TakePhotoTitle = "Take Photo", // Popup - 1st option
PhotoLibraryTitle = "Photo Library", //Popup - 2nd option
Success = (imageFile) =>
{
Device.BeginInvokeOnMainThread(() =>
{
TempimageFile = ImageSource.FromFile(imageFile);
DisplayAlert("test", "te: " TempimageFile, "OK");
ImageURL.Source = TempimageFile;
DependencyService.Get<ISaveToGallery>().Save(imageFile,"your file name");
});
}
}.Show(this);
}