2011-06-16 49 views
9

我一直在ios上使用重要的事件位置管理器,但它似乎并不基于声称的细胞变化。iphone重要的位置事件与细胞变化无关

我曾经利用显著位置事件的简单应用程序,但我无法从iOS SDK中可重复的,一致的和灵敏的反应。

我绘制的路径(蓝线),小区塔(地标)和下面的地图上的千平方米网格(蓝色正方形)。 map showing route

路线在距离5000米。

我开了3次。

  • test1的。收到2个sig事件
  • test2。无
  • test3。收到1 sig事件

在你抱怨我的测试太小了,我一直在监视其他测试路线几天,都显示不一致的形状。

我期待sig事件是基于手机塔切换。所以我使用了一个名为'signal'的越狱应用程序来识别活动单元格是什么。 (NB.it是令人惊讶的,其细胞是有效的。不是我所期望的。)

从监测“信号”的应用,细胞调换了6-7倍,从我的注意。

但我没有收到6-7 sig事件。所以我不能看到细胞切换和重大事件之间的任何关联。

,所以我有以下问题

  • Q1。什么是重大事件触发器?第二季度销售价格为
  • 。为什么结果不可靠/不一致?
  • Q3。我如何才能让我的应用程序接收到一致且敏感的重要事件至500m?

这是在测试程序

-(void)initLocationManager { 
    if (locationManager == nil) { 
     self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
     [locationManager startUpdatingLocation]; 
     [locationManager stopUpdatingLocation]; 
     [locationManager startMonitoringSignificantLocationChanges]; 

    } 
} 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [self initLocationManager]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation 
    fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%@", newLocation); 
    [[NSNotificationCenter defaultCenter] 
postNotificationName:@"PositionUpdate" object:nil]; 
} 

-lp

回答

4

显着位置变化是由iOS的决定并没有什么可以做,以直接改变他们的粒度运行的代码。请注意,仅在iOS 4中只使用手机信号塔位置。操作系统的未来版本将改善这一点。

但是作为一种解决方法,您可以在应用程序被重大位置更改唤醒/启动时切换正常的CoreLocation位置更新。然后,一旦你有完美的结果,再次禁用位置监测,让应用程序回到休眠状态。

+0

在sig事件之后正确使用CoreLocation位置是我现在使用的。 但是得到sig事件是我的问题。我甚至无法提出一个错误,因为文档太模糊了。 – lpic 2011-06-19 22:42:02

+0

你将不得不放弃对iOS 4的sig变化,因为它设计用于在几公里的变化时发射。并重新评估与iOS 5,因为那里可能是一个改进那里也使用WiFi的。 :-) – Cocoanetics 2011-06-20 04:47:10

+0

仅当设备插入电源时(至少根据我的观察),iOS 5才使用WiFi进行显着更改监视。如果你没有插入,你可能不会使用WiFi来做重大改变。 – Kevlar 2011-12-27 04:30:45

0

我不知道,如果你已经看过这一点 - 但WWDC 2010届115(iOS中使用核心位置)可能给你的显著位置改变API的一个更好的主意。

+0

不,我没有会话115之前。阅读完它后,它仍然在关于细胞变化的运动。 '计算设备更改单元塔时的位置 或其他应用程序使用位置服务' 这不是真的,否则我会引发一个错误,但我不能指定单元格更改。 这将是非常好的,让程序员做出改变,而不是苹果voodooo自己的算法。 – lpic 2011-06-20 08:47:11

1

我刚刚在我的应用程序中在相当中心的旧金山做了3公里的测试步行,并且还获得了零重大更改位置事件。我在我的应用中切换到kCLLocationAccuracyHundredMeters的正常轮询,并在同一距离内获得40多个事件。

在这里和其他地方回应各种其他答案的观点,我坚持直到iOS 5的重大变化。我认为现在最好的做法是滚动您自己的业务逻辑来轮询旧的核心位置方式和棘轮频率随着时间的推移逐渐下降(或某种程度),以便电池友好。

好像在iOS 4中一样,重要更改更适合于分辨您所在通勤的哪一端,而不是您所在的区块(甚至邮政编码)。

+0

不要抱着你的呼吸期待一些新的苹果voodoo ios5。 这条线索的道德是不清楚重大事件是如何产生的。 我们可以做的最好的事情是使用重要事件,然后使用CoreLocationManager对其进行优化。 – lpic 2011-07-12 06:17:10

+0

问题是当你想要一个事件,因为用户在街上走了300米。如果您希望触发更细化的活动,在一小时后获得重要的位置更新无助。总之:你说得对。我不屏住呼吸。 :) – 2011-07-13 00:53:45