2013-03-04 5 views
0

Кто-нибудь знает, что может привести к тому, что locationManager не будет сходиться к значению, даже если службы поиска включены?iPhone - LocationManager не сходится, даже если службы поиска пользователей включены?

Редактировать 1 - LocationManager отлично подходит для некоторых пользователей, но для других пользователей их местоположение никогда не обновляется. И устройство пользователя, местоположение которого никогда не обновляется, имеет GPS, поскольку устройства - это iPhone 5, iPad3, iPhone 4 и т. Д. Мне интересно, слишком ли они слишком далеко в стране и всегда в помещении. поэтому GPS, WiFi, сотовые башни не доходят до них? Но почему-то они выходят в интернет ....

Редактировать 2 - Больше уточнений: у пользователя есть доступ в Интернет, поскольку они могут сделать новую учетную запись на моем веб-сервере. И когда locationManager сходится по значению, используя # 2 ниже, то местоположение gps на моем веб-сервере обновляется, но этого никогда не происходит. Пользователь находится на устройстве в приложении достаточно долго, чтобы ответить на 10 вопросов и загрузить свою фотографию. Разве это недостаточно для того, чтобы locationManager сходился, если у пользователя есть доступ в Интернет?

Редактировать 3 - Еще одна странная вещь: На сайте, когда учетная запись пользователя создается, gps_lat пользователей, установлен в 0. Когда пользователь не обновлять его gps_lat на сайте, используя locationManager с iPhone, обновленный Значение для gps_lat равно (null). Что может привести к тому, что locationManager будет выдавать output = (null)?

  1. проверить, что Location Services находятся на со следующим кодом:

    BOOL locationServicesDenied = ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied); 
    
  2. Затем я обновить местоположение пользователя на веб-сайте, когда locationManager сошлась с этим кодом:

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

    if((newLocation.horizontalAccuracy > 0.0f) && (newLocation.horizontalAccuracy < 7000.0f){ 
         [self update_website:self]; 
        } 
    

Но update_website никогда не вызывается. Что заставляет меня думать, что newLocation.horizontalAccuracy никогда не становится ниже 7000.

Кто-нибудь есть идеи, почему locationManager не может сходиться, даже если службы определения местоположения включены?

+1

Скорее всего, этот метод делегата никогда не будет вызван. Возможно, вы получаете ошибку служб местоположения. Внесите другие методы делегата и проверьте, какой из них вызывается, если таковые имеются. – progrmr

+0

Я добавил Edit, указывающий, что метод делегата вызывается для некоторых пользователей, так как их данные gps обновляются. Есть ли что-то, что остановило бы метод делегирования от вызова для некоторых пользователей, но вызвал для других пользователей? –

+0

Если ошибки нет, и GPS не может получить местоположение, делегат не будет вызван. GPS будет пытаться получить местоположение, но если устройство под землей (например), оно ничего не получит (если не было кэшированного местоположения). – progrmr

ответ

3

У вас есть свойство delegate менеджера местоположения и оно называется startUpdatingLocation?

[myLocationManager setDelegate:self]; 
[myLocationManager startUpdatingLocation]; 

Редактировать: Я думал, что это происходит только на тестовом устройстве. Если это на пользовательских устройствах, вполне возможно, что точность может быть более 7000 м. Если единственное, что используется для исправления, - это сотовая радиостанция (без GPS, без WiFi), точность составляет около 1-10к в зависимости от плотности ячеек. Пользователь, находящийся в сети (Ethernet или WiFi), не гарантирует, что их WiFi находится в базе данных известных (и отображаемых) точек.

+0

Я обновил вопрос и упомянул, что для некоторых пользователей locationManager работает отлично, поэтому [myLocationManager startUpdatingLocation]; вызывается. –

+0

Это интересный момент в отношении расстояния между ячейками. Есть ли другой предел точности, чем 7K, который я должен использовать, чтобы гарантировать возврат значения gps? Но в соответствии с моим изменением № 3 выше ограничение 7K выполняется, когда пользователь обновляет свой gps_lat (null) на веб-сайте, потому что это единственный способ обновить значение веб-сайта. –

+0

Нет жестких ограничений, но 100 м-1000 м вокруг точности WiFi. GPS получит что-то вроде 10м-100м. Различные устройства обеспечивают отличную точность GPS. В видеороликах WWDC есть отличная дискуссия разработчиков, которая объясняет это хорошо. –

0

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

Ожидаете ли вы достаточно долго? Даже если устройство имеет GPS-сигнал, но нет сети передачи данных (WiFi/Cell), тогда менеджер местоположений не может получить спутниковые эфемериды через сеть передачи данных. Чтобы получить местоположение GPS, потребуется гораздо больше времени, от 2 до 10 минут. Assisted-GPS намного быстрее, но требует подключения к данным.

+0

Добавлена ​​дополнительная информация с Edit # 2. –

Смежные вопросы