【问题标题】:Does startMonitoringForRegion actually work?startMonitoringForRegion 真的有效吗?
【发布时间】:2012-01-29 12:05:04
【问题描述】:

我一直在尝试使用 startMonitoringForRegion,但在捕获进入/退出事件时遇到了问题。当我在模拟器上启动应用程序并移动到我指定的位置时,我得到 1 个输入事件,但输入事件不再触发。如果我做得正确,有人可以告诉我吗?

测试.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface EWViewController : UIViewController<CLLocationManagerDelegate> 
{
    CLLocationManager *locman;
}

@end

test.m

- (void)viewDidLoad
{
    if(locman == nil)
        locman = [[CLLocationManager alloc]init];

    locman.delegate = self;
    CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(37.787359, -122.408227);
    CLRegion *region = [[CLRegion alloc]initCircularRegionWithCenter:coord radius:1000.0 identifier:@"SF"];
    [locman startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyKilometer];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    NSLog(@"ENTER");
}

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

【问题讨论】:

  • 我发布了关于您关于区域监控的问题的答案。查看您的代码,以一公里的精度监视 1000M 的区域不会给您带来很好的结果。由于区域监控在电池寿命方面非常好,我会尝试使用最佳精度或最近的 10 米。它应该会提高您的准确性和您对区域监控的看法。
  • 我使用 kCLLocationAccuracyBest 将我的代码更改为 10M 半径,并尝试使用模拟器触发进入/退出事件,但结果没有改变。您能否发布您的代码如何使用 startMonitoringForRegion?
  • 如果您没有触发事件,您需要确保您的代理连接正确。在您发布的代码中一切看起来都不错,但我建议将回调放在您的应用程序委托中。这就是获取位置管理器回调的原因。从那里您可以将它们传递给您的其他班级,或者直接在那里处理它们。我也会从 30-40M 开始,然后从那里开始。
  • 嗯...我仍然无法触发事件。你如何在 iPhone 模拟器上进行测试?
  • 在调试中 --> 位置。我通常在 Apple 位置和自定义位置(这是我的区域坐标)之间来回切换。

标签: ios ios5 cllocationmanager


【解决方案1】:

我在我的应用程序中使用区域监控功能进行地理围栏功能已经有大约 6 个月了,我发现它非常精确。一旦你把所有东西都正确连接起来,它就可以很好地用于跟踪进入和退出事件。

虽然您可以从 -didUpdateToLocation 获得更好、更精确的读数,但您必须牺牲电池寿命才能获得它。如果您只需要偶尔更新位置,那应该没问题。如果您需要对特定位置进行持续监控,则区域监控是您的最佳选择。

我发现 -startMonitoringForSignificantLocation 根本不准确,也不是很实用。它仅依赖于蜂窝塔过渡和三角测量。由于这个原因,它也不能用于在模拟器中进行测试。希望这些信息对您有所帮助。

【讨论】:

  • 我不能同意你的看法。 startMonitoringForSignificantLocation 比 startMonitoringForRegion 精确得多。 iPhone 3Gs 也不支持startMonitoringForRegion。
  • 我们必须同意不同意。除了位置发生重大变化的问题外,我什么也没听到。区域监控是有限的,因为它只能监控选定数量的特定区域,它确实获得了来自操作系统的更多位置更新的额外好处。 Wifi 连接、手机切换、其他应用程序位置更新等。无论如何,这都是我的经验。
  • 可能在美国是这样,但在欧洲不是)——这是我的经验。
【解决方案2】:

是的,它有效,但目前非常不精确。 (我在俄罗斯测试过)

我建议你改用这个:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation;

【讨论】:

  • 精度与区域监控无关。精度取决于您在应用中为位置指定的精度。
  • @RawMean 精度相同。这取决于地理区域,我想
  • 不管怎样,这个问题已经一年了,情况可以改变
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多