当调用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;
}
}
调用堆栈中的同步阻塞调用可能会导致这种情况;例如.Wait()
、.Result
或.GetAwaiter().GetResult()
。这是我博客上描述的典型的死锁情况。
由于您正在编写Xamarin应用程序,您可能会发现这种技术很有帮助——它是一种启动异步操作(同步(的方法;正在加载"状态,然后在异步操作完成时更新。