Средство выбора мультимедиа Xamarin Essentials продолжает сбой моего приложения — без исключений или ошибок

Я создал приложение Xamarin: Android и пытаюсь разрешить пользователю устанавливать аватар. используя Xamarin Essentials Media Picker, я пытаюсь либо захватить изображение, либо выбрать его. Но каждый раз, когда приложение запускает любой метод, оно работает, а затем приводит к сбою приложения до того, как изображение будет выбрано или захвачено. Самое смешное, что иногда это срабатывает, но почти никогда.

Я пробовал много способов выяснить, что происходит, но без фактической ошибки, с которой можно работать, я ничего не получаю.

Я использую шаблон проектирования MVVM. Мой код:

    private async Task TakePicture()
    {
        try
        {
            var photo = await MediaPicker.PickPhotoAsync(); 
            if (photo != null)
            {
                await App.UserManager.UpdateAvatarAsync(photo);
                RenderImages();
            }
        }
        catch (global::System.Exception ex)
        {
            await AppShell.Current.DisplayAlert("Oops", "Something went wrong and its not your fault", "Okay");
        }

    }

person Sechaba Motaung    schedule 05.01.2021    source источник
comment
что показывает журнал устройства? Вы пробовали использовать службы отчетов о сбоях, такие как raygun.io или appcenter.ms? Правильно ли вы проверяете разрешения?   -  person Jason    schedule 05.01.2021
comment
@Jason - Разрешения, я думаю, я правильно рассмотрел. Не буду лгать, я новичок в Xamarin, поэтому я не пробовал службы отчетов о сбоях. Я думаю, что начну с проверки сначала журнала устройства, как вы предлагаете.   -  person Sechaba Motaung    schedule 05.01.2021
comment
@ Джейсон, журнал устройства ничего не показывает.   -  person Sechaba Motaung    schedule 06.01.2021
comment
Код вроде в порядке. Вы пробовали тестировать на другом устройстве? Вылетает так же?   -  person Wendy Zang - MSFT    schedule 06.01.2021
comment
@SechabaMotaung Я предлагаю два способа выбрать фотографию. Вы можете это проверить.   -  person Wendy Zang - MSFT    schedule 07.01.2021


Ответы (1)


Вы можете использовать приведенные ниже способы, чтобы выбрать фотографию.

<сильный>1. Используйте Xam.Plugin.Media. Вы можете установить из NuGet. Не забудьте проверить место сохранения фотографий и запросить разрешение на выполнение.

В приведенном ниже коде показано, как выбрать фотографию из камеры и установить элемент управления изображением.

  pickPhoto.Clicked += async (sender, args) =>
  {
    if (!CrossMedia.Current.IsPickPhotoSupported)
    {
      DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
      return;
    }
     var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
                  {
                      PhotoSize =  Plugin.Media.Abstractions.PhotoSize.Medium,
                
                  });


    if (file == null)
      return;

    image.Source = ImageSource.FromStream(() =>
    {
      var stream = file.GetStream();
      file.Dispose();
      return stream;
    });
  };

введите здесь описание изображения

<сильный>2. Используйте службу зависимостей.

[assembly: Dependency(typeof(PhotoPickerService))]
namespace DependencyServiceDemos.Droid
{
public class PhotoPickerService : IPhotoPickerService
{
    public Task<Stream> GetImageStreamAsync()
    {
        // Define the Intent for getting images
        Intent intent = new Intent();
        intent.SetType("image/*");
        intent.SetAction(Intent.ActionGetContent);

        // Start the picture-picker activity (resumes in MainActivity.cs)
        MainActivity.Instance.StartActivityForResult(
            Intent.CreateChooser(intent, "Select Photo"),
            MainActivity.PickImageId);

        // Save the TaskCompletionSource object as a MainActivity property
        MainActivity.Instance.PickImageTaskCompletionSource = new TaskCompletionSource<Stream>();

        // Return Task object
        return MainActivity.Instance.PickImageTaskCompletionSource.Task;
    }
}
}

введите здесь описание изображения

Вы можете скачать исходный файл по ссылке ниже. https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/dependencyservice/

person Wendy Zang - MSFT    schedule 07.01.2021
comment
Спасибо за ваш ответ. Я постараюсь реализовать его, как только смогу, и дам вам обратную связь. На данный момент мне пришлось двигаться очень быстро, так как проект чувствителен ко времени. - person Sechaba Motaung; 07.01.2021
comment
Рад помочь. Если у вас есть какие-либо проблемы по этому поводу, пожалуйста, дайте мне знать. Если этот ответ поможет вам, не забудьте принять ответ. - person Wendy Zang - MSFT; 08.01.2021