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

Я делаю небольшое приложение, когда пользователь нажимает кнопку, приложение получает местоположение пользователя и открывает карты Google.

Проблема в том, что если на мобильном устройстве пользователя не включен GPS, а затем включить его и снова нажать кнопку, этот метод вернет null:

location = service.getLastKnownLocation(provider);

Когда я жду после включения GPS, а затем нажимаю кнопку, метод будет работать правильно и вернет местоположение.

Как я могу решить эту проблему?


person Arwa    schedule 13.11.2014    source источник


Ответы (4)


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

Это потому, что когда вы включаете GPS, он фиксирует положение Спутника, и на основе этого вы сможете получить местоположение.

person M D    schedule 13.11.2014
comment
но должно заставить мое приложение работать, даже если была задержка, у вас есть идеи, как решить эту проблему, - person Arwa; 13.11.2014
comment
У меня есть одна идея. когда вы GPS ищет местоположение в это время вы получите местоположение с помощью сетевого провайдера.... - person M D; 13.11.2014

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

person Pratik Dasa    schedule 13.11.2014
comment
что вы имели в виду под 1 передачей? - person Arwa; 13.11.2014
comment
@arwa Это был просто пример того, что GPS проводит некоторое время между запуском и остановкой. - person Pratik Dasa; 13.11.2014

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

person gsb    schedule 13.11.2014
comment
Вы имели в виду, что нужно добавить LocationListener? Я помещаю getLastKnownLocation() в doInBackground, но то же самое, он возвращает ноль. - person Arwa; 13.11.2014
comment
да, вам понадобится LocationListener для проверки связи с последним известным местоположением. - person gsb; 13.11.2014
comment
как я могу опросить getLastKnownLocation() в течение x секунд, чтобы получить местоположение? getLastKnownLocation() принимает только один параметр Provider. - person Arwa; 13.11.2014

Если вы не использовали GooglePlayServicesClient, попробуйте это, чтобы получить местоположение пользователя.

Это самый быстрый способ получить текущие латы и долго.

Для справки и кода используйте следующую ссылку.

http://developer.android.com/training/location/retrieve-current.html

Хоп, я тебе помог.

person Nitesh    schedule 13.11.2014