Можно ли узнать текущее местоположение пользователя без использования GPS или Интернета? Я имею в виду с помощью оператора мобильной связи.
android
geolocation
gps
android-gps
Прабху М.
источник
источник
Ответы:
Вы хотите получить позицию, используя
LocationManager.NETWORK_PROVIDER
вместоLocationManager.GPS_PROVIDER
.NETWORK_PROVIDER
Рассосется на GSM или Wi - Fi, который когда - либо доступный. Очевидно, что при выключенном Wi-Fi будет использоваться GSM. Имейте в виду, что использование сотовой сети составляет примерно 500 метров.http://developer.android.com/guide/topics/location/obtain-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);
Вы также можете реализовать
LocationListener
классonLocationChanged()
в своей деятельности и, таким образом, реализовать в своей деятельности.источник
Получая это,
getLastKnownLocation
вы на самом деле не инициируете исправление самостоятельно.Имейте в виду, что это может запустить поставщика, но если пользователь когда-либо получал местоположение раньше, я не думаю, что это произойдет. Документы на самом деле не слишком ясны по этому поводу.
Согласно документам getLastKnownLocation:
Вот небольшой фрагмент:
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<String> providers = manager.getProviders(enabledProvidersOnly); for(String provider : providers){ utilLocation = manager.getLastKnownLocation(provider); if(utilLocation != null) return utilLocation; } return null; } }
Вы также должны добавить новое разрешение для
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
источник
PASSIVE_PROVIDER
,NETWORK_PROVIDER
иGPS_PROVIDER
.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 или Интернета.
Методы определения местоположения, основанные на WiFi, сотовой связи или Bluetooth, работают с помощью большой базы данных, которая постоянно обновляется. Устройство сканирует идентификаторы передатчиков и затем отправляет их в запросе через Интернет в такую службу, как Google, Apple или Skyhook. Эта служба сообщает местоположение на основе предыдущих опросов беспроводной сети из известных местоположений. Без доступа к Интернету вы должны иметь локальную копию такой базы данных и поддерживать ее в актуальном состоянии. Для глобального использования это очень непрактично.
Теоретически провайдер мобильной связи может предоставлять только локальные услуги передачи данных, но не иметь доступа к Интернету, а затем отвечать на запросы о местоположении с мобильных устройств. Операторы мобильной связи этого не делают; никто не хочет платить за такой ограниченный доступ к данным. Если у вас есть передача данных через вашего оператора мобильной связи, значит, у вас есть доступ в Интернет.
Короче говоря, использование LocationManager.NETWORK_PROVIDER или android.hardware.location.network для определения местоположения требует использования Интернета.
Использование последнего известного местоположения требует, чтобы у вас был доступ к GPS или Интернету совсем недавно. Если у вас только что был Интернет, вероятно, вы можете изменить свое положение или настройки, чтобы снова подключиться к Интернету. Если на вашем устройстве не было GPS или доступа в Интернет, функция последнего известного положения вам не поможет.
Без GPS или Интернета вы могли:
источник
Здесь можно получить текущее местоположение пользователя без использования GPS и сетевого провайдера.
1.
Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
2. Щелкните здесь для справки
источник
Вы смотрели Google Maps Geolocation Api? Геолокация карты Google
Это просто RestApi, вам просто нужно отправить запрос POST, сервис вернет местоположение с точностью в метрах.
источник
Оказывается, можно отслеживать смартфон без использования GPS.
Источники:
Основной: «PinMe: отслеживание пользователей смартфонов по всему миру»
Дополнительный: «Как отслеживать мобильный телефон без GPS или согласия»
Я пока не нашел ссылку на финальный код команды. Когда я это сделаю, я отправлю, если другой не сделал этого.
источник
Для этого вы можете использовать TelephonyManager.
источник