Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何启用对区域监视服务的访问?_Ios_Ios7_Monitoring_Cllocationmanager_Region - Fatal编程技术网

Ios 如何启用对区域监视服务的访问?

Ios 如何启用对区域监视服务的访问?,ios,ios7,monitoring,cllocationmanager,region,Ios,Ios7,Monitoring,Cllocationmanager,Region,我把这个问题简化了一点。当我在我的应用程序中创建和添加区域并询问这些区域的状态时,我会在monitoringDidFailForRegion方法中看到以下内容: 无法完成该操作。(kCLErrorDomain错误4. 检查“我看到错误4是kCLErrorRegionMonitoringDenied”,描述如下: Access to the region monitoring service was denied by the user. 这怎么可能?这是我的设置和我检查的内容: 我正在通过X

我把这个问题简化了一点。当我在我的应用程序中创建和添加区域并询问这些区域的状态时,我会在
monitoringDidFailForRegion
方法中看到以下内容:

无法完成该操作。(kCLErrorDomain错误4.

检查“我看到错误4是
kCLErrorRegionMonitoringDenied
”,描述如下:

Access to the region monitoring service was denied by the user.
这怎么可能?这是我的设置和我检查的内容:

  • 我正在通过Xcode查看日志语句
  • 我已连接到我的iPhone 5。我没有在模拟器中运行
  • 我已经确保半径足够大,可以监控(尽管这不重要)
  • 我已确保为我的设备和我的应用程序启用了设置>隐私>定位服务
  • 我已经阅读了苹果发布的所有核心位置和区域监控文件
  • 我已确保WiFi已打开,并且我拥有强大的手机信号。如果我没有,它一开始就无法找到我的位置
  • 我已确保
    didChangeAuthorizationStatus
    报告正确的状态:
    kclauAuthorizationStatusAuthorized
  • 我已确保在添加我的区域后,监视实际上是从观察对方法
    didStartMonitoringForRegion
    的调用开始的

我错过了什么?当定位服务已明确启用时,为什么会出现此错误?

因此,我再次查看了,并在列表中突出显示的项目中注意到了这一点:

确定区域监控的可用性

在尝试监视任何区域之前,应用程序应检查当前设备是否支持区域监视。区域监控可能不可用的原因有几个:

  • 设备可能没有支持区域监视所需的硬件
  • 用户可能已拒绝应用程序使用区域监视的授权
  • 用户可能在设置应用程序中禁用了位置服务
  • 用户可能在设置应用程序中禁用了设备或应用程序的后台应用程序刷新功能。
  • 设备可能处于飞行模式,无法启动必要的硬件
然后我检查了后台应用程序刷新(iOS 7上的一个新功能:设置>常规>后台应用程序刷新)是否已打开并可用于我的应用程序它不是。我打开了这个功能,我所在的地区正在报告他们的状态

令人困惑和误导的是:

[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]] returns YES 
…即使后台应用程序刷新被禁用。我认为它会返回NO

更新:

我已经向苹果公司发送了一份关于这个问题的错误报告

更新3-11-14:


苹果已经确认这是一个bug。

尝试在您的info.list中添加适当的条目,以便在授予用户使用定位服务的权限时提示用户。这些info.plist条目包括(nsLocationWhenUsageDescription和NSLocationAlwaysUsageDescription)。我注意到忽略NSLocationUsageDescription条目并没有同样的负面影响。祝你好运

为了进行区域监控(至少在iOS 9中),您需要请求“始终”授权。我在任何地方都找不到这方面的文档,但这是我能够让区域监控工作正常进行的唯一方法


rdar://23566600 -如果您在苹果内部:)

对于我的案例,请帮助设置“始终” “为了进行区域监控(至少在iOS 9中),您需要请求“始终”授权和300米半径

此授权不允许您使用可能启动应用程序以响应事件的API,例如区域监控