我们有一个完全依赖于持续位置更新的应用程序,并发现当手机没有获得gps时,即使设备连接到wifi网络,也不会调用didUpdateToLocation。为了进一步进行这项测试,我将应用程序加载到第四代iPod Touch上,结果相同。
为了澄清,当GPS可用时,该应用程序可在iPhone 4上完美运行。我们没有注意到问题,直到客户在他办公室的iPhone 4上测试它,他知道他没有得到gps。
我认为位置管理器应该支持wifi作为确定位置的方法,但事实并非如此。
这是我的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (locationManager==nil) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
NSLog(@"Accuracy best: %f distance filter none: %f", kCLLocationAccuracyBestForNavigation, kCLLocationAccuracyNearestTenMeters);
}
[locationManager startUpdatingLocation];
...
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{....
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{....
据我所知,没有什么特别的东西可以让locationManager在wifi上运行 - 现在我发现它根本不起作用。
BTW-我的手机设备是运行iOS 5 beta 7和ipod touch iOS 4.1的iPhone 4。
答案 0 :(得分:1)
我发现当应用程序首次打开时,会调用didUpdateLocation ...一次。这让我觉得,当你只处理wifi时,位置经理就在 startMonitoringSignificantLocationChanges模式。
答案 1 :(得分:0)
尝试致电:
[self.locationManager startUpdatingLocation];
可能您可能还需要在self.locationManager上配置位置管理器参数。
答案 2 :(得分:0)
听起来好像您的Wi-Fi接入点未知。为了确保它不是编码错误,在模拟器中启动Safari并查看它是否找到了您的位置。如果没有,问题是您未知的Wi-Fi AP。解决方案是让您的AP在外面知道。为此,请转到http://www.skyhookwireless.com并阅读说明。通过此站点,您可以更新XPS系统中的Wi-Fi接入点信息。注意:在我连接之前花了六个星期,但它现在有效。