0

我正在尝试为我的用户找到准确的纬度/经度坐标。我参考了文档并了解了 LocateMe 示例项目。我正在尝试编辑代码,以便弹出警报,让用户知道位置信息是否准确。

我有下面的代码,但警报总是说用户的位置信息不准确(“位置错误”)。有谁知道我做错了什么?

我刚刚意识到 Apple 的示例代码包括以下行:[setupInfo setObject:[NSNumber numberWithDouble:kCLLocationAccuracyHundredMeters] forKey:kSetupInfoKeyAccuracy];

我将如何编辑下面的代码以等待kCLLocationAccuracyNearestTenMeters. 如果可能的话,我宁愿不必引用另一个视图控制器,而是能够将它直接包含在方法中。

任何帮助都会很棒。谢谢!

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

    //CAN I PUT THE DESIRED ACCURACY HERE?
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m

    [locationMeasurements addObject:newLocation];

    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;

    if (newLocation.horizontalAccuracy < 0) return;

    if (bestEffortAtLocation == nil || bestEffortAtLocation.horizontalAccuracy > 
    newLocation.horizontalAccuracy) {

        self.bestEffortAtLocation = newLocation;

        if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Good" 
            message:@"OK" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, 
            nil];
            [alert show];
            return;      
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Bad" 
            message:@"OK" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, 
            nil];
            [alert show];
            return;
        }
    }
}
4

1 回答 1

1

将它放在委托回调中为时已晚,因为回调在使用默认的期望精度后已经返回结果。

您可以将设置放在您的 init 方法中,然后在位置管理器上调用 start。

// set this before starting the calculations.
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[self.locationManager startUpdatingLocation];

我发现唯一的问题是将其放置在 UX 流程中,因为它会弹出警报,如果从 UX 角度来看在错误的时间完成,可能会导致用户禁用此功能。如果使用位置服务是应用程序的基础,那么,这并不好。:)

希望这可以帮助。

于 2013-08-04T04:03:59.723 回答