Android: невозможно получить геолокацию из сети, если телефон подключен через WiFi - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь получить геолокацию из сети так:

boolean network_enabled = false;
LocationManager lm;
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

try{
   network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex){
   Log.v("my_log_tag", "network location exception: " + ex.toString());
}

if(network_enabled){
   lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
}

Хорошо работает, если мой телефон подключен только через сотовую сеть, но у меня проблема: если мой телефон подключен не только через сотовую сеть, но и к какой-либо точке доступа WiFi (скажем, к моей домашней точке доступа), тогда я не получаю места. Кажется, что Android пытается получить геолокацию с помощью моей точки доступа WiFi, но, конечно, не может. Как я могу заставить Android получать местоположение из сотовой сети и игнорировать любое соединение WiFi?

Я точно знаю, что это возможно, потому что, например, Приложение Яндекс.Карт прекрасно.

Мне нужно сказать еще одну деталь: это приложение Яндекс Карт может получать геолокацию по сети, даже если у меня НЕ установлен флажок Настройки -> Местоположение и безопасность -> Используйте беспроводные сети . Я понятия не имею, как это работает, но, возможно, он использует совершенно другой подход.

Факт : если у меня включен GPS, он использует GPS. Если у меня отключен GPS, но подключение к сотовой сети включено, то он использует сеть для определения местоположения, независимо от соединения WiFi и флажка « Использовать беспроводные сети ».

Как я могу сделать то же самое?

Спасибо.

1 Ответ

5 голосов
/ 22 марта 2012

Из всей работы по поиску геолокации, только точки доступа Wi-Fi будут периодически отправлять свое местоположение (от 30 секунд до 5 минут). Но следует понимать, что NETWORK_PROVIDER получает также и от вышек сотовой связи (что является медленным и неточным, но имеет лучший сигнал в зданиях).

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerNetwork);

именно так я нашел самые быстрые результаты для геолокации, используя gps телефона, однако, используя NETWORK_PROVIDER, он работает очень медленно, и я не смог найти хорошее решение, чтобы заставить местоположение обновляться быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...