В настоящее время я использую последнюю версию Xamarin.Forms (4.5.0.617) и Xamarin.Essentials (1.5.2).
У меня есть внедренная служба зависимости, которая отвечает за доступ к телефонным контактам, она фактически является оболочкой для кода разрешений Xamarin.Essentials. Мне нужно гарантировать, что код выполняется в потоке пользовательского интерфейса, чтобы избежать исключений. Я дошел до приведенного ниже кода, однако он не работает так, как я ожидал. В моем приложении появляется всплывающее окно с разрешениями и предлагает мне выбор разрешить / запретить, но затем весь код после того, как RequestAsync не выполняется, как будто ответ никогда официально не возвращается. В следующий раз, когда я запускаю приложение, оно сразу же работает (так что предположительно разрешение в фоновом режиме было правильно записано).
public async Task<bool> RequestAccessPhoneContacts()
{
PermissionStatus status = PermissionStatus.Denied;
status = await MainThread.InvokeOnMainThreadAsync<PermissionStatus>(async () =>
{
return await Permissions.RequestAsync<Permissions.ContactsRead>();
});
return (status == PermissionStatus.Granted);
}
Я не уверен, вызвал ли я проблему с тем, как я пытаюсь принудительно вставить код в поток пользовательского интерфейса, или я неправильно использую асинхронный код ... или (что менее вероятно), это ошибка в код разрешений Xamarin.Essentials. На данный момент я видел такое поведение только на Android, но не тестировал его ни на одном другом.
Любая помощь очень ценится :)
Благодарность!