Работает ли CLLocationManager без интернета? - PullRequest
13 голосов
/ 08 сентября 2011

Глупый вопрос !! Хотя я хочу знать, возможно ли, что CLLocationManager работает без Интернета ?????

т.е. iPhone вообще не подключен к интернету

Ответы [ 3 ]

13 голосов
/ 08 сентября 2011

iPhoneiPadDev ответил несколько неверно: хотя иногда менеджер местоположения не работает, он может работать без подключения к сети.Если вы хотите убедиться в этом сами, поезжайте куда-нибудь с ужасным или несуществующим сотовым приемом: GPS все равно будет работать.

Это очень сильно зависит от условий окружающей среды и используемого вами устройства,iPod Touches и некоторые iPad не имеют GPS и используют точки доступа WiFi для определения местоположения.Если у вас нет доступа к сети, CLLocationManager вернет неверное местоположение.

iPhone и 3G iPad не имеют с GPS, поэтому вы можете получить соответствующее местоположение. Однако , они используют A-GPS (вспомогательный GPS), который использует информацию из сети, чтобы обеспечить более быструю блокировку GPS.Если у вас нет подключения к Интернету, чипу GPS может потребоваться некоторое время для получения сигнала и обеспечения точного местоположения, а точность может быть значительно ниже, если вы находитесь в помещении или не видите ровно небо.

Важная точка : CLLocationManager может и вернет вам местоположения, даже если их нет: координаты, однако, будут недействительными.Важно проверить возвращаемые местоположения и убедиться, что вы уверены, что они правильные, прежде чем использовать их.

4 голосов
/ 08 сентября 2011

Да, это работает, если в настройках терминала включены Location Services. Нет необходимости подключения к интернету.

0 голосов
/ 18 марта 2019

Да, но в открытом небе (имеется в виду на дороге, на земле).

  1. Если вы в сети, вы получите координаты местоположения по Wi-Fi, мобильным данным, а затем, если вы выключите Интернет и измените свое местоположение (вдали от этого места), скажем, вы сейчас находитесь в здании (3-й этаж), то вы не получите правильное обновление местоположения, вместо этого вы получите координаты кэша.

Чтобы это исправить:

Запишите метку времени (скажем «RecordDate») в автономном режиме, когда вы хотите определить местоположение, затем сравните метку времени, заданную didUpdateToLocations: метод.

если метка времени didUpdateToLocations> Записанная метка времени, используйте ее

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations
{
    CLLocation *currentLocation = [locations lastObject];
    NSLog(@"didUpdateToLocation: %@", currentLocation);

    NSDate *eventDate=[[NSUserDefaults standardUserDefaults] objectForKey:@"RecordDate"];

    NSComparisonResult result = [currentLocation.timestamp compare:eventDate];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
    switch (result)
    {
        case NSOrderedAscending: {
            NSLog(@"Location%@ is greater than %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);

        }
            break;
        case NSOrderedDescending:
            NSLog(@"%@ is less %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);
            if (currentLocation != nil)
            {
                 //Use them
                //currentLocation.coordinate.latitude
                // currentLocation.coordinate.longitude
            }
            break;
        case NSOrderedSame:
            //Use them
            break;
        default:
            NSLog(@"erorr dates %@, %@", [df stringFromDate:eventDate], [df stringFromDate:currentLocation.timestamp]);
            break;
    }
}
...