Xamarin Essentials权限,RequestAsync未返回

yyhrrdl8  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(103)

当调用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;
    }
}
wsewodh2

wsewodh21#

调用堆栈更上层的同步阻塞调用可能会导致这种情况;例如.Wait().Result.GetAwaiter().GetResult()。这是我的博客中描述的classic deadlock situation
因为您正在编写Xamarin应用程序,所以您可能会发现this technique很有用-它是一种启动异步操作(同步)、显示“正在加载...”状态,然后在异步操作完成时进行更新的方法。

相关问题