【问题标题】:How to identify when iOS prompts "Turn on Location Service" alert?如何识别iOS何时提示“打开位置服务”警报?
【发布时间】:2019-05-30 18:59:40
【问题描述】:

在我的应用中,此警报会显示多次。 类似问题:iOS: Why does "Turn on Location Services" alert show twice upon startup?.

如何识别iOS何时提示“开启定位服务”提醒?

在 Google 地图应用中看到两个警报的场景。

  1. 关闭设备的定位服务
  2. 从 AppStore 安装 Google 地图应用程序。 (如果您的设备已经有 Google 地图应用。从设备上卸载现有应用,然后从 AppStore 安装该应用)
  3. 启动应用程序
  4. 将显示提及的警报
  5. 点击“取消”
  6. 退出应用
  7. 再次启动应用程序
  8. 提及的警报将再次显示。

另一种情况是在 Google 地图应用中看到两个以上的警报。

  1. 关闭设备的定位服务
  2. 从 AppStore 安装 Google 地图应用程序。 (如果您的设备已经有谷歌地图应用程序。从设备上卸载现有应用程序并从 AppStore 安装该应用程序)
  3. 启动应用程序
  4. 将显示提及的警报
  5. 锁定屏幕
  6. 等待 20 秒(如果您的设备有更多 RAM,您可能需要等待额外的时间)
  7. 解锁屏幕并立即退出应用程序(如果无法及时退出应用程序,请从第 5 步开始重复)
  8. 再次启动应用程序
  9. 将显示提及的警报
  10. 从第 5 步开始重复,一次又一次地查看提到的警报。

【问题讨论】:

  • 这有什么问题吗?您是否随时提示警报?如果是,那么您想在应用程序生命周期内显示一次此警报吗?
  • 如果您没有提示警报并退出应用程序,它会再次显示警报,这是一个好方法吗?如果您确实想在应用程序的生命周期中显示一次,则将一些首选项值存储在应用程序内存中。
  • @AbuUlHassan 根据我的客户要求,我开发了一个具有相同功能的警报。并且每当在“func locationManager(_ manager:CLLocationManager,didChangeAuthorization status:CLAuthorizationStatus)”委托中给出的状态为“拒绝”或“受限”时,它都会显示。所以我想避免每当操作系统在问题中显示提到的警报时我开发的警报。
  • 我认为缺点在于您的代码,为什么不发布检查并询问位置请求管理的代码。
  • @AbuUlHassan 对不起,我不明白你的意思。你能说得更清楚一点吗?

标签: ios cllocationmanager


【解决方案1】:

我知道这不是一个好方法,但它应该可以解决问题

if window.rootViewController?.childViewControllers.last?.isKind(of: UIAlertController){
//Do not show your alert  
    }
else{
//show your alert
}

【讨论】:

  • 感谢您的努力和时间,我们的应用程序窗口或视图控制器没有显示操作系统提示警报。证明:i.imgur.com/gXFGodQ.png。此图像是通过以下场景拍摄的。 1.关闭设备的定位服务。 2.从 AppStore 安装谷歌地图应用程序。 (如果您的设备已经有谷歌地图应用程序。从设备上卸载现有应用程序并从 AppStore 安装应用程序) 3.启动应用程序并立即最小化应用程序(如果您无法从第 1 步重试) 4.OS 提示警报可以在设备的主屏幕中看到。
  • 我无法看到它只是占位符的图像
  • 任何它不是应用程序窗口它的移动窗口像这样 let window = UIWindow(frame: UIScreen.main.bounds)
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2011-06-20
  • 1970-01-01
  • 2017-05-08
相关资源
最近更新 更多