iOS 区域监控重用项目问题



我有一个项目,我使用区域监控取得了不同的成功,在大多数情况下它有效,但不像我希望的那样准确,但很快发现它不应该完全准确,这很好,只是物理测试很困难。尽管如此,他们还是希望在一天内完成一个完整的用户界面。这就是我所做的。

我采用了旧项目,复制并重命名了它,捆绑 ID 以及我认为需要它的其他任何地方,以使其成为本质上不同的项目。然后,我创建了一个故事板,就像我以前使用 xib 文件一样。然后更改了启动过程,使其使用情节提要而不是预先存在的 xib 文件。都工作花花公子。具有新的界面和基本相同的代码。

问题。。。

这些区域永远不会触发...曾经,即使位置服务正在工作,因为我使用位置服务告诉我我是否在一个半径范围内,但围栏回调 API 永远不会关闭。然后我在多个设备上对其进行了测试。最后其中一个触发了...但是低头,看它是旧的应用程序,它触发围栏没有问题。而新的则没有。我甚至无法开始理解我做错了什么会导致这种情况。我什至使用 api 确实失败了并且确实成功了方法,它说围栏注册没有问题。

另一个令人烦恼的问题是,如果我使用 GPX 文件来模拟位置,栅栏会在代码中触发......我必须说令人沮丧的事情。

有什么建议吗?如果需要,将提供代码示例。

好的,

鉴于 QA 详细信息,我可以想到一些事情:

1-确保在复制项目时,您也正确复制了.plist,并且已启用后台模式下的"位置更新"。

2-当我测试didEnterRegion和didExitRegion时,我发现开车或步行并不总是确切的。在研究之后,我收集了区域监控有一个算法,可以"确保"你在触发didEnterRegion和didExitRegion之前实际上已经越过了区域的边界。因此,如果你的半径是 100 米,并且你从一个方向从中心步行 101 米,并假设它会触发 didExitRegion,它可能不会发生。您有时必须步行或再开车x米才能启动,didEnterRegion也是如此。我在这里的建议是确保你始终在代码中显着改变半径。

现在这变得更加复杂,如果你在区域内,你越过100米,然后回来。 很可能你不会得到触发器,因为你从来没有划掉(从区域监控的角度)首先穿越回来!

这对于GPX来说不是问题,因为您正在强制划掉(退出该区域),因此您不允许设备应用其算法来安全地确保您已划掉。

3-确保实施:

-(void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

放置一些 NSLogs 来确定启动时的状态。这应该有助于集中问题,并且应该立即触发,让您知道您是否在该地区或我们之外(即使没有过境)。如果这没有触发,就会有更大的问题。

4-最后,CLRegion在iOS7中被弃用。您需要使用 CLCircularRegion。并使用以下方法启动该区域:

initWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius identifier:(NSString *)identifier

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新