Android: получить текущее местоположение пользователя без использования gps или Интернета
Возможно ли получить текущее местоположение пользователя без использования gps
или internet
? Я имею в виду с помощью поставщика мобильной сети. Может кто-нибудь мне помочь?
- LocationClient getLastLocation () return null
- Android LocationManager.getLastKnownLocation () возвращает null
- Получение широты и долготы за 30 секунд
- Android MapView - автоматическое масштабирование до тех пор, пока не будут видны все ItemizedOverlay
- Получите определенное местоположение GPS как-то на окнах 8
- Как я могу получить страшные разрешения WRITE_SECURE_SETTINGS для моего приложения для Android?
- Разрешение ACCESS_COARSE_LOCATION дает точность ячеек на Android
- Получите определенное местоположение GPS как-то на окнах 8
То, что вы хотите сделать, это получить позицию, используя 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 или Интернета вы могли бы:
- Сфотографируйте ночное небо и используйте текущее время, чтобы оценить свое местоположение на основе звездной диаграммы. Для этого, вероятно, потребуется дополнительное оборудование для обеспечения правильной оценки углов ваших изображений.
- Используйте акселерометр для отслеживания местоположения, начиная с известной позиции. Накопление ошибки при таком подходе делает его непрактичным для большинства ситуаций.
Вы заглянули в Google Maps Geolocation Api? Географическая карта Google Map
Это просто RestApi, вам просто нужен POST запрос, служба вернет местоположение с точностью в метрах
С наилучшими пожеланиями
Похоже, что можно отслеживать смартфон без использования GPS.
FWIW.
Источники:
Первичный: «PinMe: отслеживание пользователя смартфона по всему миру»
Secondary: «Как отслеживать мобильный телефон без GPS-или согласия»
Я еще не нашел ссылку на окончательный код команды. Когда я это сделаю, я опубликую, если другой не сделал этого.
Увидимся.