在 IOS 中请求位置权限 14 从不 returns

Request for Location Permissions in IOS 14 never returns

我在使用以下代码在 Xamarin 中请求 IOS 位置权限时遇到问题,它适用于 IOS 15 和 IOS 13,但从来没有 returns [=20] =] 14. 我发现有几个地方在谈论它并使用类似的东西,但它们是从 2020 年开始的。最近是否发生了某些变化以再次导致此问题?

while (true)
            {
                if (await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>() == PermissionStatus.Granted)
                    break;

               _ = Permissions.RequestAsync<Permissions.LocationWhenInUse>();

                await Task.Delay(1000);
            }

Xamarin 基础版 1.7.0

Xamarin.Forms 5.0.0.2125

您不能循环等待特定结果。 iOS 将向用户显示一次请求。一旦他们回答了,那就是答案;唯一的例外是如果他们 select “允许一次” - 您将获得位置许可,但下次启动您的应用程序时,就好像您没有询问过一样,对话框将再次显示。

如果用户授予权限,则您可以使用位置。如果他们拒绝许可,那么您不能 - 您要么在没有位置的情况下继续,要么将他们引导到您的应用的设备设置,他们可以在其中授予位置许可。

获取权限应答是异步的;用户 select 需要一些时间才能做出响应。 await 会为您处理。

var permission = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>()

if (permission == PermissionStatus.Granted) {
    // Great - you can use location 
} else {
    // No location permission - You can't use it 
    // You can check the value of permission to see if location was denied or is unavailable 
}