android studio Wechsel zwischen GPS und Netzwerkanbieter je nach Verfügbarkeit




android studio location (2)

Anscheinend fordern Sie nur Standortaktualisierungen in der onCreate () -Methode an. Sobald die Provider wechseln müssen Sie Updates vom neuen Provider anfordern, nein?

Hier ist ein Post auf einem Android-Blog über Standorte, der auch die Änderungen des Providers abdeckt:

http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

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);
}
}

Dies ist mein Code-Snippet und mein Problem ist, dass, sobald die Anwendung mit GPS Switched ON installiert ist, es nicht zu GSM wechselt, um den Standort zu holen, sobald wir GPS ausgeschaltet haben, und umgekehrt.

Bitte sagen Sie mir, wie Sie effizient zwischen GPS und GSM wechseln können, je nach Verfügbarkeit des Standortanbieters.

HINWEIS: Meine App ist ein Dienst.

Vielen Dank.

Edit: Ich habe einen BroadcastReceiver, deshalb nehme ich an, dass onCreate () aufgerufen wird, sobald das GPS ON / OFF passiert ist.

Ich habe auch versucht, die Verfügbarkeit des Providers in onLocationChanged (Location location) zu überprüfen. Aber es hat nicht geholfen.

EDIT: Ich habe meine onProviderDisabled & onProviderEnabled so geändert, Bitte sagen Sie mir, was ich hier falsch mache ..

    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);
        }

    }

Habe eine Lösung dafür:

 public void onProviderDisabled(String provider) {
   locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
   if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,  locationListener);
   } else {
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
   } 
}

@Override
public void onProviderEnabled(String provider) {
  locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);   
  if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
  } else {
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
  }
}

Was ich verpasst habe, ist locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); in onProviderEnabled () und onProviderDisabled ().

Vielen Dank





gsm