2010-05-27 13 views
13

Tengo este código para obtener el mejor proveedor disponibleubicación Obtener androide del mejor proveedor disponible

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

y luego el oyente

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

Cuando probé a un dispositivo (HTC Magic) I descubrió que cuando gps está desactivado, se bloquea de la red de inmediato. Cuando habilito el gps, no toma datos de la red y espera a que se bloquee desde el gps.
Me gustaría bloquear la posición como los mapas de google que hasta que tengan una buena señal gps usan la red para determinar mi ubicación.
Pensé que el mejor criterio lo haría, pero lo que hacen es elegir un proveedor una vez.
¿Hay algo mal con mi código o tengo que hacer subprocesos y tiempos de espera, etc. para que esto ocurra?

+0

spagi su código me ayudó en gran medida - en ninguna parte en el sitio dev androide es que explica cómo conseguir el mejor proveedor posible. Algunos dispositivos pueden tener gps, algunos gsm, algunos wifi. –

+0

Aquí hay un artículo de Google muy interesante: http://developer.android.com/training/basics/location/currentlocation.html – shkschneider

Respuesta

14

Quizás pueda intentar escuchar tanto al proveedor de red como al proveedor de gps durante un cierto período de tiempo y luego verificar los resultados de los dos. Si no tiene resultados del gps, use los resultados de la red. Así es como lo hice.

+0

Así que hago 2 oyentes de ubicación, uno para Gps y otro para la red e inicializo ambos con requestLocationUpdates. Puedo escucharlos a los dos y luego con uno enLocationChanged? – spagi

+0

Sí, deberías escuchar ambos. Incluso puede usar lastKnownLocation antes de que la actualización provenga de cualquier proveedor. – Fedor

+1

Puede agregar una variable de ubicación en su MyLocationListener y establecer su valor dentro de onLocationChanged(). En su actividad principal, cree dos instancias de MylocationListener, una para el gps y otra para el proveedor de red. Escuche ambos desde una cierta cantidad de tiempo (puede implementar esto creando una secuencia de temporizador) y cuando se acabe el tiempo, deje de escuchar y compruebe primero la variable de ubicación en gpslistener si hay alguna, sino, verifique el networklistener. – capecrawler

Cuestiones relacionadas