Xamarin FilePicker блокирует UserDialog - PullRequest
0 голосов
/ 16 марта 2020

Я использую метод

srcPath = await CrossFilePicker.Current.PickFile();

из пакета Xamarin.Plugin.FilePicker. Это прекрасно работает, и я могу выбрать файл на моем устройстве. После этого я хочу дать пользователю обратную связь через

 await UserDialogs.Instance.AlertAsync(message);

Однако на Android Samsung SM-T805 диалоговое сообщение заблокировано.

Мне кажется, что FilePicker не полностью закрыт. При достижении метода PickFile () появляются две windows: темная с названием Android и, после подтверждения доступа к внешнему хранилищу, собственно средство выбора файлов. Как только я выбрал файл, средство выбора файлов исчезает, и мой следующий код выполняется. Но фоновый слой (темный, с названием Android) не исчезнет, ​​пока я не покину метод Xamarin.Forms.Command, который я связал с кнопкой, вызывающей метод выбора файла.

Мой код (примерно):

[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;

namespace SomeNameSpace
{
    public class SomeViewModel
    {
        [...]
        public Command ImportCommand => new Command(() => ChooseFile());

        private async void ChooseFile()
        {
            string srcPath = await CrossFilePicker.Current.PickFile();
            await UserDialogs.Instance.AlertAsync("Help Me Please.");

            // Further Code
            [...]
        }
    }
}

Есть идеи? Заранее спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Николь Лу намекнула на использование DisplayAlert вместо UserDialogs. Простого изменения этого метода было недостаточно. Но DisplayAlert позволяет вам решить, на какую страницу отправлять оповещения. Таким образом, хитрость заключалась в том, чтобы сначала сохранить текущую страницу перед использованием FilePicker, а затем отправить предупреждение на эту страницу. Вот обновленный код:

[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;

namespace SomeNameSpace
{
    public class SomeViewModel
    {
        [...]
        public Command ImportCommand => new Command(() => ChooseFile());

        private async void ChooseFile()
        {
            Page page = App.Current.MainPage;
            string srcPath = await CrossFilePicker.Current.PickFile();
            await page.DisplayAlert("Help", "Please help me.", "OK");

            // Further Code
            [...]
        }
    }
}
...