В настоящее время я использую последнюю версию Xamarin.Forms (4.5.0.617) и Xamarin.Essentials (1.5.2).
У меня есть служба внедрения зависимостей, которая отвечает за получение доступа к телефону контакты, это фактически обертка вокруг кода разрешений Xamarin.Essentials. Мне нужно гарантировать, что код выполняется в потоке пользовательского интерфейса, чтобы избежать исключений. Я дошел до приведенного ниже кода, однако, он не работает так, как я ожидал. В моем приложении появляется всплывающее окно с разрешениями, которое дает мне возможность разрешить / запретить, но затем весь код после RequestAsyn c не выполняется, так как ответ никогда официально не возвращается. В следующий раз, когда я запускаю приложение, оно работает сразу (так что, вероятно, разрешение в фоновом режиме было правильно записано).
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);
}
Я не уверен, что вызвал проблему с тем, как я я пытаюсь принудительно ввести код в поток пользовательского интерфейса или неправильно использую код asyn c ... или (наименее вероятно), является ли это ошибкой в коде разрешений Xamarin.Essentials. Я только видел это поведение на Android в данный момент, но я не проверял его ни на каких других.
Любая помощь с благодарностью:)
спасибо!