Cómo funciona-requestLocationUpdates () + LocationRequest/Listener


Soy un nuevo codificador de Android y tengo problemas para solicitar actualizaciones para mi localización.

Trabajo con tutoriales de http://developer.android.com/training/location/receive-location-updates.html .

Mi aplicación puede manejar excepciones, obteniendo latitud y longitud correctamente, y geocoder puede manejar la visualización de la dirección. Pero pido la ubicación solo una vez , o cuando la ubicación cambia. Me gustaría hacer intervalos de tiempo. Por ahora empecé a implementar código de los tutoriales y se ve así:

public class MainActivity extends Activity implements 
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener,
LocationListener {

private static final int MILLISECONDS_PER_SECOND = 1000;

public static final int UPDATE_INTERVAL_IN_SECONDS = 5;
private static final long UPDATE_INTERVAL =
          MILLISECONDS_PER_SECOND * UPDATE_INTERVAL_IN_SECONDS;

private static final int FASTEST_INTERVAL_IN_SECONDS = 1;
private static final long FASTEST_INTERVAL =
          MILLISECONDS_PER_SECOND * FASTEST_INTERVAL_IN_SECONDS;

private TextView tvStatus;
private TextView tvLatitude;
private TextView tvLongitude;

LocationRequest mLocationRequest;
LocationClient mLocationClient;
Location mCurrentLocation;

boolean bNetworkEnabled;
boolean bGPSEnabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    tvStatus = (TextView)findViewById(R.id.tvStatus);
    tvLatitude = (TextView)findViewById(R.id.tvLatitude);
    tvLongitude = (TextView)findViewById(R.id.tvLongitude);

    mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setInterval(UPDATE_INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationClient = new LocationClient(this, this, this);

    checkProviders();
}

Así que ya hay intervalos implementados y solicitud de ubicación. Pero en el enlace que di antes hay un comentario que debería usar en algún lugar requestLocationUpdates() (probablemente onCreate(), onStart() y la eliminación de la solicitud en onStop()), pero tengo problemas con él. Por lo tanto, Eclipse me muestra 3 métodos:

requestLocationUpdates(LocationRequest request, LocationListener listener)
requestLocationUpdates(LocationRequest request, PendingIntent CallbackIntent)
requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper)

Así que el primero creo que es el más correcto en este lugar. ¿Qué debo colocar en la ranura LocationListener? Pido ayuda con poca explicación de cómo funciona.

Author: artex, 2013-06-03

2 answers

Está implementando LocationListener en su actividad MainActivity. Por lo tanto, la llamada para actualizaciones de ubicación concurrentes será así:

mLocationClient.requestLocationUpdates(mLocationRequest, this);

Asegúrese de que el LocationListener que está implementando es de la api de Google, es decir, importe esto:

import com.google.android.gms.location.LocationListener;

Y no esto:

import android.location.LocationListener;

Y debería funcionar bien.

También es importante que LocationClient esté realmente conectado antes de hacer esto. Te sugiero que no lo llames en onCreate o onStart métodos, pero en onResume. Todo se explica bastante bien en el tutorial para Google Location Api: https://developer.android.com/training/location/index.html

 35
Author: HigiPha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-24 06:22:20

Yo uso este:

LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

Por ejemplo, usando un intervalo 1s:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);

El tiempo es en milisegundos, la distancia es en metros.

Esto llama automáticamente:

public void onLocationChanged(Location location) {
    //Code here, location.getAccuracy(), location.getLongitude() etc...
}

También los tenía incluidos en el script, pero en realidad no los usé:

public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}

En resumen:

public class GPSClass implements LocationListener {

    public void onLocationChanged(Location location) {
        // Called when a new location is found by the network location provider.
        Log.i("Message: ","Location changed, " + location.getAccuracy() + " , " + location.getLatitude()+ "," + location.getLongitude());
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}
    public void onProviderEnabled(String provider) {}
    public void onProviderDisabled(String provider) {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,this);
    }
}
 8
Author: Josttie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-19 18:13:12