как сохранить фотографию в папке галереи в Android с помощью xamarin

#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);
    }