didEnterRegion()/ didExitRegion()在后台或设备锁定时应用程序永远不会被触发

时间:2014-07-16 03:09:28

标签: ios objective-c bluetooth cllocationmanager ibeacon

根据iBeacon Bluetooth didEnterRegion and didExitRegion methods are never fired中已经解决的问题,这是另一个问题。

详细地说,didEnterRegion和didExitRegion的方法是在后台或设备锁定时从不触发。此外,这两种方法可以正常触发,而前面的信标应用

我的应用程序基于苹果演示" Airlocated (示例代码,由apple inc提供)"在波纹管链接: https://developer.apple.com/library/ios/samplecode/AirLocate/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013430-Intro-DontLinkElementID_2。我很难修改任何代码,除了添加一些代码,如下所示:

in file" APLAppDelegate.m"

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    NSLog(@"Entered region: %@", region);

    [self sendLocalNotificationForBeaconRegion:(CLBeaconRegion *)region];
}


- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
    NSLog(@"Exited region: %@", region);
}

在文件APLMonitoringViewcontroller.m

- (void)updateMonitoredRegion
{
...

            [self.locationManager startMonitoringForRegion:region];
            [self.locationManager startRangeingForRegion:region];
...
}

补充一下。我试过了波纹管方法:

  • 设置"位置更新"背景模式为YES
  • 将notifyOnExit和notifyOnEntry指定为true
  • 使用iOS 7.1.2重启iPhone4s

有人可以给我一些建议吗?

1 个答案:

答案 0 :(得分:2)

您等待背景检测多长时间了?在某些情况下,这可能需要15分钟。 See here for details.

如该文章所述,您不需要将位置更新背景模式设置为YES,也不需要将notifyOnExit和notifyOnEntry指定为true。