CLLocationManager didEnterRegion:在应用程序暂停时使用iBeacon

时间:2014-01-14 21:37:08

标签: ios objective-c core-location bluetooth-lowenergy ibeacon

当我进入我定义的信标区域时,我试图唤醒我的应用程序(重新启动它),但我无法让它工作。这是我正在使用的步骤和代码。

  1. 设置"位置更新"背景模式为YES。
  2. 监控我的CLBeaconRegion

    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"EBEFD083-70A2-47C8-9837-E7B5634DF524"];
        beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"daRegion"];
        beaconRegion.notifyEntryStateOnDisplay = NO;
        beaconRegion.notifyOnEntry = YES;
        beaconRegion.notifyOnExit = YES;
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        [self.locationManager startMonitoringForRegion:beaconRegion];
    
  3. 实施委托方法

    - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region;
    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;
    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;
    
  4. 我可能遗失的任何东西?我已阅读文档,博客文章,论坛,似乎没有任何工作。 This是我读过的网站之一,this是另一个。

1 个答案:

答案 0 :(得分:9)

评论“当应用被杀时我无法正常工作”非常重要。

如果您使用iOS7应用程序切换器杀死应用程序(例如,通过向上滑动应用程序图标),那么在进入或离开iBeacon区域时,您将无法在后台重新启动应用程序。这是设计 - 如果用户不希望应用程序运行,那么Apple认为代码不应该能够重新启动它。 See this thread.

幸运的是,用户通常不这样做。出于测试目的,如果要完全停止应用程序,请不要这样做。重新启动手机。 (但请注意,启动后需要一分钟左右才能检测到iBeacons。)

EDIT 2014/03/10:自iOS 7.1发布以来,此行为已发生变化。从任务切换器中杀死应用程序不再阻止它在后台检测到iBeacons。