Мое приложение не может определить координаты широты / долготы по 3G в Северной Америке.Он отлично работает при подключении к Wi-Fi.Это было подтверждено как для AT & T, так и для Verizon с iOS 5. В Великобритании он работает, как и ожидалось, для 3G и Wi-Fi с o2.
Я действительно озадачен тем, что может быть причиной.Я думаю, что мой код довольно прост в отношении точности, но, поскольку я нахожусь на другой стороне пруда, я могу быть далеко?
Может кто-нибудь заметить какие-либо вопиющие ошибки в моем коде?(Я удалил несколько несвязанных методов).
static NSTimeInterval MaxLocationAge = 60.0; // Seconds.
static CLLocationAccuracy DesiredHorizontalAccuracy = 200.0; // Meters.
static NSTimeInterval UpdateTimeout = 30.0; // Seconds.
@implementation AFLocation
@synthesize locationManager = _locationManager, delegate = _delegate, bestEffortAtLocation = _bestEffortAtLocation, updateStartedAt = _updateStartedAt;
- (id)init
{
self = [super init];
if (self) {
CLLocationManager *manager = [[CLLocationManager alloc] init];
self.locationManager = manager;
[manager release];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
}
return self;
}
- (void)update
{
self.updateStartedAt = [NSDate date];
isUpdating = YES;
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
if ([[NSDate date] timeIntervalSinceDate:self.updateStartedAt] > UpdateTimeout) {
[self.locationManager stopUpdatingLocation];
if (isUpdating) {
[self updateDidTimeout];
}
isUpdating = NO;
}
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > MaxLocationAge) {
return;
}
if (newLocation.horizontalAccuracy < 0) {
return;
}
if (self.bestEffortAtLocation == nil || self.bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
self.bestEffortAtLocation = newLocation;
if (newLocation.horizontalAccuracy <= DesiredHorizontalAccuracy) {
self.bestEffortAtLocation = nil;
isUpdating = NO;
[self.locationManager stopUpdatingLocation];
[self didUpdateWithDesiredAccuracyToLocation:newLocation];
}
}
}
@end