Android: получить текущее местоположение пользователя без использования gps или Интернета

Возможно ли получить текущее местоположение пользователя без использования gps или internet ? Я имею в виду с помощью поставщика мобильной сети. Может кто-нибудь мне помочь?

То, что вы хотите сделать, это получить позицию, используя LocationManager.NETWORK_PROVIDER вместо LocationManager.GPS_PROVIDER . NETWORK_PROVIDER будет разрешаться на GSM или Wi-Fi, которые когда-либо доступны. Очевидно, что при использовании Wi-Fi будет использоваться GSM. Имейте в виду, что использование сети сотовых телефонов с точностью до 500 м.

http://developer.android.com/guide/topics/location/obtaining-user-location.html имеет действительно отличную информацию и пример кода.

После того, как вы закончите с большей частью кода в OnCreate() , добавьте следующее:

 // Acquire a reference to the system Location Manager LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // Called when a new location is found by the network location provider. makeUseOfNewLocation(location); } public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {} }; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

Вы также можете реализовать свою активность в classе LocationListener и, таким образом, реализовать onLocationChanged() в своей деятельности.

Получив getLastKnownLocation вы фактически не инициируете исправление самостоятельно.

Имейте в виду, что это может привести к запуску провайдера, но если пользователь когда-либо получил место раньше, я не думаю, что это произойдет. Документы на самом деле не слишком ясны.

Согласно документам getLastKnownLocation:

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

Вот быстрый fragment:

 import android.content.Context; import android.location.Location; import android.location.LocationManager; import java.util.List; public class UtilLocation { public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){ LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Location utilLocation = null; List providers = manager.getProviders(enabledProvidersOnly); for(String provider : providers){ utilLocation = manager.getLastKnownLocation(provider); if(utilLocation != null) return utilLocation; } return null; } } 

Вы также должны добавить новое разрешение для AndroidManifest.xml

  

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

1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2. Нажмите здесь для справки

 boolean gps_enabled = false; boolean network_enabled = false; LocationManager lm = (LocationManager) mCtx .getSystemService(Context.LOCATION_SERVICE); gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); Location net_loc = null, gps_loc = null, finalLoc = null; if (gps_enabled) gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (network_enabled) net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (gps_loc != null && net_loc != null) { //smaller the number more accurate result will if (gps_loc.getAccuracy() > net_loc.getAccuracy()) finalLoc = net_loc; else finalLoc = gps_loc; // I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy) } else { if (gps_loc != null) { finalLoc = gps_loc; } else if (net_loc != null) { finalLoc = net_loc; } } 

Нет, в настоящее время вы не можете найти место, не используя GPS или интернет.

Методы определения местоположения на основе Wi-Fi, Cellular или Bluetooth работают с помощью большой базы данных, которая постоянно обновляется. Устройство сканирует идентификаторы передатчика, а затем отправляет их в запросе через Интернет в службу, например Google, Apple или Skyhook. Эта служба отвечает местоположением на основе предыдущих проверок беспроводной связи из известных мест. Без доступа в Интернет вам необходимо иметь локальную копию такой базы данных и обновлять ее. Для глобального использования это очень непрактично.

Теоретически, мобильный провайдер может предоставлять только локальную службу данных, но не имеет доступа к Интернету, а затем отвечает на запросы местоположения с мобильных устройств. Мобильные провайдеры этого не делают; никто не хочет платить за такой доступ к ограниченному доступу. Если у вас есть служба передачи данных через вашего мобильного провайдера, у вас есть доступ в Интернет.

Короче говоря, использование LocationManager.NETWORK_PROVIDER или android.hardware.location.network для получения местоположения требует использования Интернета.

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

Без GPS или Интернета вы могли бы:

  1. Сфотографируйте ночное небо и используйте текущее время, чтобы оценить свое местоположение на основе звездной диаграммы. Для этого, вероятно, потребуется дополнительное оборудование для обеспечения правильной оценки углов ваших изображений.
  2. Используйте акселерометр для отслеживания местоположения, начиная с известной позиции. Накопление ошибки при таком подходе делает его непрактичным для большинства ситуаций.

Вы заглянули в Google Maps Geolocation Api? Географическая карта Google Map

Это просто RestApi, вам просто нужен POST запрос, служба вернет местоположение с точностью в метрах

С наилучшими пожеланиями

Похоже, что можно отслеживать смартфон без использования GPS.

FWIW.

Источники:

Первичный: «PinMe: отслеживание пользователя смартфона по всему миру»

Secondary: «Как отслеживать мобильный телефон без GPS-или согласия»

Я еще не нашел ссылку на окончательный код команды. Когда я это сделаю, я опубликую, если другой не сделал этого.

Увидимся.

  • Как проверить текущее состояние приемника GPS?
  • Обнаружение GPS-переключателя в телефонах Android
  • Возможно ли создать навигационное приложение «Пошаговый поворот» на Android с помощью Google Maps?
  • UIImagePickerController и извлечение EXIF-данных из существующих фотографий
  • Отключить / проверить местоположение макета (запретить спуфинг gps)
  • Неверные данные местоположения Android GPS по запросу
  • Лучший способ получить местоположение пользователя GPS в фоновом режиме на Android
  • Android находят местоположение GPS один раз, отображает диалоговое окно загрузки
  • Ошибка Android «gps требует ACCESS_FINE_LOCATION», хотя мой файл манифеста содержит это
  • Получить текущую широту и долготу в строке
  • Android: как захватить изображение местоположения GPS
  • Interesting Posts
    Давайте будем гением компьютера.