Чи можна отримати поточне місцезнаходження користувача без використання GPS або Інтернету? Я маю на увазі за допомогою оператора мобільної мережі.
Чи можна отримати поточне місцезнаходження користувача без використання GPS або Інтернету? Я маю на увазі за допомогою оператора мобільної мережі.
Відповіді:
Що ви хочете зробити, це отримати позицію, використовуючи LocationManager.NETWORK_PROVIDER
замість LocationManager.GPS_PROVIDER
. Вирішення NETWORK_PROVIDER
буде вирішено на GSM або Wi-Fi, які коли-небудь доступні. Очевидно, що при вимкненому wifi буде використовуватися 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()
у своїй діяльності.
Отримавши те, 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"
Ви подивились Google Maps Geolocation Api? Геолокація Google Map
Це простий RestApi, вам просто потрібен запит POST, служба поверне місце з точністю в метрах.
Здається, можна відстежувати смарт-телефон без використання GPS.
Джерела:
Основне: "PinMe: Відстеження користувачів смартфонів у всьому світі"
Вторинний: "Як відстежити мобільний телефон без GPS чи згоди"
Я ще не знайшов посилання на остаточний код команди. Коли я це зроблю, я розміщу повідомлення, якщо інший цього не зробив.