android - parametros - Cómo funciona-requestLocationUpdates()+LocationRequest/Listener
requestlocationupdates parameters android (2)
Estás implementando LocationListener en tu actividad MainActivity. La convocatoria de 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 el LocationClient realmente esté conectado antes de hacer esto. Le sugiero que no lo llame en los métodos onCreate o onStart, sino en onResume. Todo se explica bastante bien en el tutorial de Google Location Api: https://developer.android.com/training/location/index.html
Soy un nuevo programador de Android y tengo problemas para solicitar actualizaciones para mi localización.
Estoy trabajando con tutoriales de http://developer.android.com/training/location/receive-location-updates.html .
Mi aplicación puede manejar excepciones, obtener latitud y longitute correctamente, y geocoder puede manejar la visualización de la dirección. Pero solicito la ubicación solo una vez, o cuando la ubicación cambia. Me gustaría hacer intervalos de tiempo. Por ahora empecé a implementar el código de los tutoriales y se parece a eso:
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 eliminación de la solicitud en onStop()
), pero tengo un problema con eso. Entonces, 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 más correcto en este lugar. ¿Qué debo colocar en la ranura de LocationListener
? Pido ayuda con poca explicación de cómo funciona.
Yo uso este:
LocationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
Por ejemplo, usando un intervalo de 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 tuve estos 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 breve:
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);
}
}