gpt4 book ai didi

iOS - 使用设置和取消按钮打开定位服务 - 如何捕获取消按钮点击

转载 作者:可可西里 更新时间:2023-11-01 04:13:57 24 4
gpt4 key购买 nike

当用户第一次启动应用程序并尝试登录时,iOS 对话框会提示他们 - “打开位置服务”。

当用户单击“取消”时,我需要捕获。有没有Notification发送?如果有,它的名字是什么?我一直找不到它。
CLAUthorizationStatuskCLAuthorizationDenied当位置服务被禁用或用户单击“不允许”时。当用户单击“取消”时,它不会触发 authorizationChange事件。当用户单击“取消”时,应用程序就会挂起。

最佳答案

简短回答:您无法收到该通知。您可以使用 CLLocationManager 推断用户的选择并采取相应的行动。方法(下面更长的答案)。

更长的答案:

首先,欢迎使用 Stack Overflow。在提出您的问题并尝试与在这里提供帮助的人合作之前,最好搜索一下其他人之前是否提出过同样的问题。

一个简短的搜索给出了(仅提及其中一些):

  • How to handle “Cancel” button on Alert pop up for Location services
  • How to get location services to reprompt the user for location permission if they accidentally refused it?
  • locationManager:didFailWithError: not called if user Location Services are off
  • How to prompt user to turn on Location Services…again
  • How can I prompt the user to turn on location services after user has denied their use
  • How to ask permission from user for second time to allow to access the current location?

  • 现在,让我们尝试从 iOS 文档开始总结它们:

    If your app relies on location services to function properly, you should include the UIRequiredDeviceCapabilities key in the app’s Info.plist file. You use this key to specify the location services that must be present in order for your app to run. The App Store uses the information in this key from preventing users from downloading apps to devices that do not contain the listed features.

    Important: If your app uses location services but is able to operate successfully without them, do not include the corresponding strings in the UIRequiredDeviceCapabilities key.



    因此,如果您的应用确实需要访问用户的位置,您应该添加 location-services最终 gpsUIRequiredDeviceCapabilities .

    然后,在您的代码中的某处 - 需要时,您必须检查是否启用了位置服务。
    [CLLocationManager locationServicesEnabled]

    它们可能因以下三个原因而被禁止:
  • 用户可以在“设置”应用中禁用定位服务。
  • 用户可以拒绝特定应用的位置服务。
  • 设备可能处于飞行模式,无法启动必要的硬件。

  • 您对第二种情况感兴趣:用户拒绝让您的应用使用定位服务。

    同样,来自文档:

    Important: In addition to hardware not being available, the user has the option of denying an application’s access to location service data. During its initial uses by an application, the Core Location framework prompts the user to confirm that using the location service is acceptable. If the user denies the request, the CLLocationManager object reports an appropriate error to its delegate during future requests. You can also check the application’s explicit authorization status using the authorizationStatus method.


    [CLLocationManager authorizationStatus]

    这可能会返回:
  • kCLAuthorizationStatusNotDetermined如果用户尚未选择此应用程序是否可以使用位置服务。
  • kCLAuthorizationStatusRestricted此应用程序无权使用定位服务。用户无法更改此应用程序的状态,可能是由于家长控制等主动限制。
  • kCLAuthorizationStatusDenied用户明确拒绝为此应用程序使用定位服务,或者定位服务当前在“设置”中被禁用。
  • kCLAuthorizationStatusAuthorized此应用程序被授权使用位置服务。

  • 如果 [CLLocationManager locationServicesEnabled]返回 NO并且您尝试启动定位服务(即调用 [locationManager startUpdatingLocation] ),系统会提示用户确认是否应重新启用定位服务。鉴于位置服务很可能被故意禁用,用户可能不欢迎此提示。

    我想你知道,并且做了所有前面的步骤(我只确定你检查了 authorizationStatus )。 你拒绝向我们展示你的应用程序的重要代码,所以我只能假设背后的整体逻辑。现在您说您的应用程序挂起。这应该是因为您没有正确捕获错误?如果您愿意,捕获错误是重新提示用户的方法。

    调用 [locationManager startUpdatingLocation]后,如果未授权,您的代表应定义 locationManager:didFailWithError:为了 catch kCLErrorDenied .
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    此时,您可以显示 UIAlert坚持要求用户让您访问其位置,或触发 UI 或任何您喜欢的更改。

    最后的笔记

    我希望您能理解我为什么要索取代码:原因是为您提供替代解决方案,而不是回复“您无法收到 'Cancel' 通知”。

    如果此答案不能满足您的问题,请详细说明为什么您需要按下“取消”/“不允许”按钮,以便我们提供替代方案。

    显然,我的建议是不要通过不断要求他们启用位置服务(如果他们不想要)来惹恼他们。

    发布脚本:如果不是全部,也许答案在某些部分看起来很迂腐和明显,但我们在这里也为 future 的读者提供答案。

    关于iOS - 使用设置和取消按钮打开定位服务 - 如何捕获取消按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334780/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com