Xamarin Essentials Permissions.RequestAsync does not return



当调用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应用程序,您可能会发现这种技术很有帮助——它是一种启动异步操作(同步(的方法;正在加载"状态,然后在异步操作完成时更新。

最新更新