2011-12-22 14 views
18

Parece que me llaman la primera vez que se inicia la actividad, justo después de onCreate, parece que se llama a intervalos aleatorios, si me muevo o no ???Android cuando exactamente está onLocationChanged llamado

Independientemente de eso, ¿simplemente se llama automáticamente si tengo un código como este en el método onCreate?

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 

¿Es eso correcto ???

Cheers, Mike.

Respuesta

21

Su pregunta no es clara y código initially.Your título no son coincidentes. Estoy dando respuesta solo por tu título.

Debe registrar el Oyente de ubicación para su Administrador de ubicación, entonces solo se llamará a onLocationChanged() de acuerdo con la configuración que proporcionó al registrar el oyente de ubicación.

Vea a continuación el código de cómo hacerlo. Utilicé el Proveedor de GPS, también puede usar cualquier proveedor según los criterios.

LocationManger lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       // TODO Auto-generated method stub 
      } 
      @Override 
      public void onProviderDisabled(String provider) { 
       // TODO Auto-generated method stub 
      } 
      @Override 
      public void onProviderEnabled(String provider) { 
       // TODO Auto-generated method stub 
      } 
      @Override 
      public void onStatusChanged(String provider, int status, 
        Bundle extras) { 
       // TODO Auto-generated method stub 
      }   
     }); 

Viniendo a su pregunta, onLocationChanged() será llamado si la actualización de la ubicación actual no coincide con la última ubicación conocida.

La ubicación actualizada se cambiará para cada minTime (en mi caso 1000 milisegundos) y también si el dispositivo movió distancia minDistance (en mi caso 0 metros).

Espero que entienda esto.

+0

Perdón por eso Yugandhar, tengo demasiadas preguntas en una, tengo que dejar de hacerlo, SO es muy confuso. –

+0

Tengo exactamente el mismo código que usted en otra actividad y es el que me gustaría usar, pero no puedo matar la actividad una vez que se inicia sin importar cuánto intento. Tendré que poner eso en otra publicación. ¡Gracias por tu ayuda! –

+0

, pero ¿cómo puede distinguir los casos en los que no se llama a onlocationchanged porque su ubicación no ha cambiado, desde los casos cuando onlocationchanged no se llama porque las señales gps son débiles y no se puede obtener una corrección de ubicación? – dariusiv

0
public void onLocationChanged(Location location) 

el método anterior se denomina de forma automática una vez que su ubicación se ha cambiado ..

+15

"Si tiene problemas, quizás esté haciendo algo mal". - ¡Genial! :) –

5

si se desea capturar nuevas ubicaciones, usted tiene que registrar un LocationListener así:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
LocationListener listener = new LocationListener() { 
    ... 
} 
locationManager.requestLocationUpdates(GPS_PROVIDER, intervall, distance, listener); 

Con intervall y distancia puede configurar:

  1. Si intervall es mayor que 0, el LocationManager potencialmente podría descansar por Intervall milisegundos entre actualizaciones de ubicación
  2. Si distancia es mayor que 0, sólo se emitirá una ubicación si el dispositivo se mueve por distancia metros.

Cuando LocationListener está registrado, el LocationManager comienza a obtener su ubicación geográfica y llama a onLocationChanged(). Si la distancia es muy baja, puede suceder que el método se invoque con mucha frecuencia en un corto período de tiempo. De acuerdo con el intervall, el LocationManager descansará después.

Creo que el LocationManager solo comenzará a funcionar cuando se registra un LocationListener.

Espero que ayude ...

Cheers, Tobi

Cuestiones relacionadas