Можно ли узнать текущее местоположение пользователя без использования GPS или интернета? Я имею в виду с помощью оператора мобильной сети.
Получить текущее местоположение пользователя в Android без использования GPS или интернета
Ответ 1
То, что вы хотите сделать, это получить позицию, используя 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);
Вы также можете реализовать свою деятельность в классе LocationListener
и тем самым реализовать onLocationChanged()
в своей деятельности.
Ответ 2
Получив 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" />
Ответ 3
Здесь можно получить текущее местоположение пользователя без использования GPS и сетевого провайдера.
1 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Ответ 4
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;
}
}
Ответ 5
Нет, вы не можете найти местоположение без использования GPS или Интернета.
Методы размещения на основе WiFi, сотовой или Bluetooth работают с помощью большой базы данных, которая постоянно обновляется. Устройство сканирует идентификаторы передатчика, а затем отправляет их в запрос через интернет на службу, например Google, Apple или Skyhook. Эта служба отвечает местоположением на основе предыдущих проверок беспроводной связи из известных мест. Без доступа в Интернет вам необходимо иметь локальную копию такой базы данных и обновлять ее. Для глобального использования это очень непрактично.
Теоретически, мобильный провайдер может предоставлять только локальную службу данных, но не имеет доступа к Интернету, а затем отвечает на запросы местоположения с мобильных устройств. Мобильные провайдеры этого не делают; никто не хочет платить за такой доступ к ограниченному доступу. Если у вас есть служба передачи данных через вашего мобильного провайдера, у вас есть доступ в Интернет.
Короче говоря, использование LocationManager.NETWORK_PROVIDER или android.hardware.location.network для получения местоположения требует использования Интернета.
Используя последнюю известную позицию, вы должны иметь доступ к GPS или интернету совсем недавно. Если у вас просто интернет, предположительно, вы можете настроить свою позицию или настройки, чтобы снова получить Интернет. Если ваше устройство не имеет GPS или доступ в Интернет, последняя известная функция позиции вам не поможет.
Без GPS или Интернета вы можете:
- Сделайте снимки ночного неба и используйте текущее время, чтобы оценить свое местоположение на основе звездной карты. Для этого, вероятно, потребуется дополнительное оборудование для обеспечения правильной оценки углов ваших изображений.
- Используйте акселерометр для отслеживания местоположения, начиная с известной позиции. Накопление ошибки при таком подходе делает его непрактичным для большинства ситуаций.
Ответ 6
Вы смотрели Google Maps Geolocation Api? Google Map Geolocation
Это просто RestApi, вам просто нужно POST запрос, сервис вернет местоположение с точностью до метра.
Ответ 7
Похоже, что смартфон можно отслеживать без использования GPS.
Источники:
Основной: "PinMe: отслеживание пользователя смартфона по всему миру"
Вторичный: "Как отследить мобильный телефон без GPS или без согласия"
Я еще не нашел ссылку на окончательный код команды. Когда я это сделаю, я опубликую, если другой не сделал этого.