Вот как запустить службу определения местоположения от поставщиков GPS и сети (Wi-Fi / данные).
LocationManager locationManager = (LocationManager)getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
Если вы хотите прекратить прослушивание обновлений местоположения, запустите этот код: locationManager.removeUpdates(locationListener);
Одна строка кода перестала бы прослушивать любые обновления местоположения, независимо от поставщика (GPS / сеть), потому что LocationManager не заботится, откуда приходят обновления.
В вашем случае я предполагаю, что вы знаете, как создать пользовательский интерфейс, чтобы пользователь мог решить, использовать ли GPS / сеть или нет. А затем вы можете сделать что-то вроде этого:
if ( useGPS ) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
}
if ( useNetwork ) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
}
Если бы пользователь включил обоих поставщиков, обновления местоположения могли бы быть более точными. И если пользователь отключил обоих провайдеров, это не беда. Поскольку в LocationListener не будет приходить никаких обновлений, и это должно быть то, что хотел пользователь.
Кстати, вот код для создания LocationListener:
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// you may add some logic here to determine whether the new location update is more accurate than the previous one
if ( isBetterLocation(location,currentBestLocation) ) {
currentBestLocation = location;
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
person
CristianoYL
schedule
12.06.2017