当调用Permissions.RequestAsync<Permissions.LocationWhenInUse>()
时,我没有得到任何结果,应用程序卡住了。无论用户接受还是拒绝请求。
我已经按照文档中的说明设置了MainActivity
:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
现在我尝试用下面的方法获取权限。但是RequestAsync
调用被卡住了,我从来没有收到过一个答案。一旦权限被授予,应用程序被重启,一切都按预期运行。
public async Task CheckPermissions()
{
var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
if (status != PermissionStatus.Granted)
{
status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
}
if (status == PermissionStatus.Granted)
{
HasLocationPermissions = true;
}
else if (status != PermissionStatus.Unknown)
{
HasLocationPermissions = false;
}
}
1条答案
按热度按时间wsewodh21#
调用堆栈更上层的同步阻塞调用可能会导致这种情况;例如
.Wait()
、.Result
或.GetAwaiter().GetResult()
。这是我的博客中描述的classic deadlock situation。因为您正在编写Xamarin应用程序,所以您可能会发现this technique很有用-它是一种启动异步操作(同步)、显示“正在加载...”状态,然后在异步操作完成时进行更新的方法。