【问题标题】:CLLocationManager didEnterRegion: with iBeacon while app is suspendedCLLocationManager didEnterRegion:在应用程序暂停时使用 iBeacon
【发布时间】:2014-02-03 03:51:41
【问题描述】:

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

  1. 将“位置更新”后台模式设置为“是”。
  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;
    

我可能遗漏了什么?我已经阅读了文档、博客文章、论坛,但似乎没有任何效果。 This 是我阅读的网站之一,this 是另一个。

【问题讨论】:

  • 您的应用是否检测到前台的信标?
  • 是的,即使在后台,当应用程序被杀死时我也无法让它工作。

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


【解决方案1】:

“当应用程序被杀死时我无法让它工作”的评论很重要。

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

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

编辑 2014/03/10:自 iOS 7.1 发布以来,此行为已更改。从任务切换器中终止应用不再阻止它在后台检测 iBeacons。

【讨论】:

  • 没有冒犯,但我认为(80% 肯定)你有点错,Apple 文档在这里说相反:developer.apple.com/library/ios/documentation/userexperience/…我是你的工作和博客文章的粉丝,也许你'是对的,Apple 在他们提到的部分中弄错了,即使您的应用程序没有运行,您也可以监控一个区域并仍然获得委托回调。无论如何感谢您的回复。
  • @herz,我很想错!我不同意这两个文件不一致。您引用的那个说“即使您的应用程序没有运行”也会进行回调。这是真的,但它忽略了应用程序必须至少运行一次才能使其工作的细节。从应用程序切换器中终止应用程序实质上会将您的应用程序恢复到第一次启动之前的状态。如果您对此表示怀疑,可以很容易地设置测试并自己尝试。我很想听听你的结果!
  • 哦,好吧,也许“即使你的应用程序没有运行”的部分不够清楚......然后我想我已经让它在切换器中仍然处于非活动状态的应用程序工作,谢谢你的澄清。进入非活动状态而不是重新启动手机的另一种简单方法是在 Xcode 中运行应用程序,然后将其停止,更快更容易。
  • 我会接受你的回答,因为你的澄清和你对这个信标主题的全部帮助,再次感谢!
猜你喜欢
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多