Dig*_*Pro 5 cllocationmanager ios
当用户第一次启动应用程序并尝试登录时,会显示iOS对话框 - "打开位置服务".
我需要在用户点击"取消"时捕获.有Notification
送吗?如果是这样,它的名字是什么?我一直无法找到它.
的CLAUthorizationStatus
是kCLAuthorizationDenied
,当位置服务被禁用或用户点击"不允许".当用户单击"取消"时,它不会触发该authorizationChange
事件.当用户点击"取消"时,应用程序就会挂起.
fur*_*ins 14
简短的回答:你无法抓住那个通知.您可以推断用户选择并通过使用CLLocationManager
方法采取行动(下面的答案越长).
更长的回答:
首先,欢迎Stack Overflow.在善意提出问题并尝试与在场帮助的人合作之前,最好先搜索其他人之前提出的相同问题.
简要搜索(仅提及其中一些):
现在,让我们尝试总结一下,从iOS文档开始:
如果您的应用依赖于位置服务来正常运行,您应该在应用的Info.plist文件中包含UIRequiredDeviceCapabilities键.您可以使用此密钥指定必须存在的位置服务,以便您的应用运行.App Store使用此密钥中的信息阻止用户将应用程序下载到不包含所列功能的设备.
重要提示:如果您的应用程序使用位置服务但能够在没有它们的情况下成功运行,请不要在UIRequiredDeviceCapabilities键中包含相应的字符串.
所以,如果您的应用程序确实需要访问用户的位置,你应该增加location-services
,并最终gps
向UIRequiredDeviceCapabilities
.
然后,在代码中的某个位置 - 需要时,您必须检查位置服务是否已启用.
[CLLocationManager locationServicesEnabled]
Run Code Online (Sandbox Code Playgroud)
可能会因为三个原因而被禁止:
您对第二种情况感兴趣:用户拒绝允许您的应用使用位置服务.
再次,从文档:
重要提示:除了硬件不可用外,用户还可以选择拒绝应用程序访问位置服务数据.在应用程序初次使用期间,Core Location框架会提示用户确认使用位置服务是可以接受的.如果用户拒绝该请求,则CLLocationManager对象会在将来的请求期间向其委托报告相应的错误.您还可以使用authorizationStatus方法检查应用程序的显式授权状态.
[CLLocationManager authorizationStatus]
Run Code Online (Sandbox Code Playgroud)
这可能会回归:
kCLAuthorizationStatusNotDetermined
如果用户尚未选择该应用程序是否可以使用位置服务.kCLAuthorizationStatusRestricted
此应用程序无权使用位置服务.用户无法更改此应用程序的状态,可能是由于父母控制等主动限制.kCLAuthorizationStatusDenied
用户明确拒绝为此应用程序使用位置服务,或者当前在"设置"中禁用了位置服务.kCLAuthorizationStatusAuthorized
此应用程序被授权使用位置服务.如果[CLLocationManager locationServicesEnabled]
返回NO
并且您无论如何都尝试启动位置服务(即呼叫[locationManager startUpdatingLocation]
),系统会提示用户确认是否应重新启用位置服务.鉴于位置服务很可能是故意禁用的,用户可能不欢迎此提示.
我想你知道,并做了所有前面的步骤(我只确定你检查了authorizationStatus
).您拒绝向我们展示您的应用程序的重要代码,因此我只能假设背后的整体逻辑.现在你说你的应用程序挂了.这应该是因为你没有正确捕捉错误?如果您愿意,捕获错误是重新提示用户的方法.
调用之后[locationManager startUpdatingLocation]
,如果没有授权,你的委托应该定义一个locationManager:didFailWithError:以便捕获kCLErrorDenied.
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)
此时,您可以显示a UIAlert
坚持要求用户授予您访问其位置的权限,或触发UI中的更改或您喜欢的任何内容.
我希望你理解我为什么要求代码:原因是为你提供一个替代解决方案而不是回复"你不能抓住'取消'通知".
如果这个答案不能满足您的问题,请详细说明为什么需要按下"取消"/"不允许"按钮,这样我们就可以提供替代方案.
显然,我的建议是,如果他们不想要,他们会不断地要求他们提供定位服务,从而不会让人惹恼他们.
Post scriptum:如果不是全部的话,也许答案在某些部分看起来很迂腐和明显,但我们也在这里为未来的读者提供答案.
归档时间: |
|
查看次数: |
34087 次 |
最近记录: |