Переключение между GPS и сетевым провайдером в зависимости от доступности

public void onCreate() {
 locationListener = new GeoUpdateHandler();
 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

try {
   gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
   network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) { 
}

if(gps_enabled) {
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 100, locationListener);
} else if(network_enabled) { // Checking for GSM
   locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, DISTANCE, locationListener);
}   
}   
public class GeoUpdateHandler implements LocationListener {
private void getPresentLocation(Location location) {
    ... 
            //Fetch the locations
            ...
}

@Override
public void onProviderDisabled(String provider) { }

@Override
public void onProviderEnabled(String provider) { }

@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }

@Override
public void onLocationChanged(Location location) {
    getPresentLocation(location);
}
}

это мой фрагмент кода, и моя проблема заключается в том, что после установки приложения с включенным GPS оно не переключается на GSM для определения местоположения после выключения GPS, и наоборот. .

Подскажите, пожалуйста, способ эффективного переключения между GPS и GSM в зависимости от доступности провайдера местоположения.

ПРИМЕЧАНИЕ. Мое приложение - это служба.

Спасибо.

Изменить: у меня есть BroadcastReceiver, поэтому я предполагаю, что onCreate () будет вызываться после включения / выключения GPS.

Я также пробовал проверить доступность провайдера в onLocationChanged (Местоположение местоположения). Но это не помогло.

РЕДАКТИРОВАТЬ: Я изменил свои onProviderDisabled и onProviderEnabled вот так, Скажите, пожалуйста, что я здесь делаю не так ..

    public void onProviderDisabled(String provider) {
        locationManager.removeUpdates(locationListener);
        if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);               
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
        }   
    }

    @Override
    public void onProviderEnabled(String provider) {
        locationManager.removeUpdates(locationListener);
        if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
        } else {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);
        }

    }
5
задан Lenin 31 December 2011 в 09:27
поделиться