gpt4 book ai didi

android - 不在 UI 线程上时如何请求权限?

转载 作者:行者123 更新时间:2023-12-03 19:14:24 27 4
gpt4 key购买 nike

我目前正在使用最新版本的 Xamarin.Forms (4.5.0.617) 和 Xamarin.Essentials (1.5.2)。

我有一个依赖注入(inject)服务,它负责访问电话联系人,它实际上是 Xamarin.Essentials 权限代码的包装器。我需要保证代码在 UI 线程上执行以避免异常。我已经了解了下面的代码,但是,它并没有像我预期的那样工作。在我的应用程序中,权限弹出窗口出现并为我提供了允许/拒绝选项,但是 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);
}

我不确定我尝试将代码强制到 UI 线程上的方式是否引起了问题,或者我是否错误地使用了异步代码......或者(最不可能)它是否是一个错误Xamarin.Essentials 权限代码。我目前只在 Android 上看到过这种行为,但我还没有在其他任何人上测试过。

非常感谢任何帮助:)

谢谢!

最佳答案

事实证明,我在设置时没有正确遵循文档。

将此添加到我的主要 Activity 中后,一切都恢复了生机。

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

这些信息来自我在 Xamarin.Essentials github 上提出的一个错误 -
https://github.com/xamarin/Essentials/issues/1227

关于android - 不在 UI 线程上时如何请求权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61252633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com