Переключение между сетью и провайдером GPS - PullRequest
10 голосов
/ 31 марта 2011

Я хочу реализовать LocationListener, который будет переключаться между сетевыми и GPS-провайдерами в зависимости от доступности.

Например, если GPS не включен, я хочу использовать сеть, но как только GPS включен, я хочупрекратить прослушивание обновлений местоположения из сети и начать прослушивание с GPS.

Точно так же я хочу, чтобы он прослушивал обновления из сети, как только GPS отключен.

Возможно ли это?


Подзапрос

Является ли GPS быстрым, как сеть, для определения местоположения?


Ответы [ 2 ]

9 голосов
/ 31 марта 2011

Конечно, вы просто получаете провайдеров для сети и GPS и передаете, что хотите, на locationManager.requestLocationUpdates().

Если вы хотите прекратить прослушивание определенного провайдера, вызовите locationManager.removeUpdates() с объектом прослушивателя, указанным вами в locationManager.requestLocationUpdates().

Сеть:

Criteria crit = new Criteria();
crit.setPowerRequirement(Criteria.POWER_LOW);
crit.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = locationManager.getBestProvider(crit, false);

GPS:

Criteria crit2 = new Criteria();
crit2.setAccuracy(Criteria.ACCURACY_FINE);
provider2 = locationManager.getBestProvider(crit2, false);

Вы можете использовать LocationManager.isProviderEnabled () doc , чтобы узнать, включен ли / отключен соответствующий поставщик.В документации LocationManager больше информации.

GPS обычно намного медленнее, чем сеть, так как вам нужно находить более 3 удаленных спутников и т. Д.

1 голос
/ 08 апреля 2011

Я использую это

LocationManager locationManager;
LocationListener locationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    locationManager = (LocationManager) this
            .getSystemService(Context.LOCATION_SERVICE);
    String locationProvider = LocationManager.NETWORK_PROVIDER;
    Location lastKnownLocation = locationManager
            .getLastKnownLocation(locationProvider);
    if (lastKnownLocation == null) {
        locationProvider = LocationManager.GPS_PROVIDER;
        lastKnownLocation = locationManager
                .getLastKnownLocation(locationProvider);
    }
    if (lastKnownLocation != null) {
        makeUseOfNewLocation(lastKnownLocation);
    }
    locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            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
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    } else {
        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    }
}
...