2011-12-28 11 views
5
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); 
} 
} 

este es mi fragmento de código y mi problema es que una vez que la aplicación se instala con GPS activado, no cambia a GSM para recuperar la ubicación una vez que desactivamos el GPS , y viceversa.Alternar entre gps y el proveedor de red según la disponibilidad

Así que por favor, dígame una manera de cambiar de manera eficiente entre el GPS y GSM de acuerdo a la disponibilidad del proveedor de ubicación.

NOTA: Mi aplicación es un servicio.

Gracias.

Editar: Tengo una BroadcastReceiver, por eso supongo que el onCreate() será invocado una vez que el GPS ON/OFF suceda.

También trató de comprobar la disponibilidad del proveedor en onLocationChanged (ubicación, ubicación). Pero no ayudó.

EDIT: He modificado mi onProviderDisabled & onProviderEnabled como este, Por favor, diga lo que estoy haciendo mal aquí ..

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

    } 
+0

sí, aquí encontré otro problema, mi onProviderEnabled() no me llamaron. – Lenin

Respuesta

5

¿Qué soluciones para esto:

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

Lo que me faltaba es locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); en onProviderEnabled() y onProviderDisabled().

Gracias

Cuestiones relacionadas