LocationClient requestUpdates onLocationChanged nunca llamado
Tengo este código que utilizo para posicionar una aplicación de mapa. Lo probé en un dispositivo Galaxy S2 y funciona bien, pero cuando lo probé en un dispositivo nexus 4, la onLocationChanged
llamada onLocationChanged
nunca se llama. ¿Qué podría estar haciendo mal?
Aquí está mi código de actividad:
- OnLocationChanged no ha llamado a algunos dispositivos
- API de geocodificación de Android BroadcastReceiver no activado
- GetTriggeringGeofences y getGeofenceTransition de LocationServices
- Hacer que Android Geofences permanezca activo hasta que se haya eliminado / caducado o solo hasta que se inicie mi PendingIntent
- No se puede resolver el símbolo 'LocationClient' en Android Studio
public class BaseMapActivity extends FragmentActivity implements Injectable, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationListener { private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000; private MapEntity component; private boolean yetStarted = false; private LocationClient mLocationClient; private LocationRequest mLocationRequest; private Location location; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_activity); mLocationClient = new LocationClient(this, this, this); mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // TODO mLocationRequest.setInterval(5000); // TODO mLocationRequest.setFastestInterval(5000); // TODO replaceFragment(R.id.map_container, mapFragment); // Agrega el fragment de extras Fragment extrasFragment = component.getExtrasFragment(); replaceFragment(R.id.map_extras, extrasFragment); } @Override protected void onStart() { super.onStart(); mLocationClient.connect(); } @Override protected void onStop() { if (mLocationClient.isConnected()) { mLocationClient.removeLocationUpdates(this); mLocationClient.disconnect(); } super.onStop(); } @Override public void onConnected(Bundle arg0) { mLocationClient.requestLocationUpdates(mLocationRequest, this); location = mLocationClient.getLastLocation(); if (location == null) { return; } Toast.makeText(this, "onConnected", Toast.LENGTH_SHORT).show(); } @Override public void onDisconnected() { mLocationClient.removeLocationUpdates(this); Toast.makeText(this, "onDisconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } @Override public void onLocationChanged(Location location) { component.setCenter(location); String msg = "Updated Location: " + Double.toString(location.getLatitude()) + "," + Double.toString(location.getLongitude()); Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case CONNECTION_FAILURE_RESOLUTION_REQUEST: switch (resultCode) { case Activity.RESULT_OK: break; } } } @SuppressLint("ShowToast") @Override public void onConnectionFailed(ConnectionResult connectionResult) { if (connectionResult.hasResolution()) { try { connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); } } else { Toast.makeText(this, "An error ocurred getting current location", Toast.LENGTH_SHORT); } } }
Qué extraño es que su trabajo en un dispositivo, pero no en el otro.
- Comprobación del estado del GPS con Google Play Services
- Actualizaciones de ubicación continua en segundo plano
- ¿Cuándo debo desconectarme de Google Play Services en mi aplicación de Android?
- DeadObjectException en GMS :: LocationClient (Android)
- Do Geofences permanece activo en android después de reiniciar el dispositivo
- ¿Existe una alternativa al Cliente de ubicación (API de Google Play)?
- ¿Debería conectarse y desconectarse de Google Play Services en cada actividad?
- LocationClient reconecta automáticamente en `onDisconnect`
Trate de establecer la ubicación de la imitación para ver si la locationChange se llama o no.
Aquí tienes un ejemplo que estaba usando para esto antes de la producción.
private Location createMockLocation() { if (mockLocation == null) { mockLocation = new Location("mock"); mockLocation.setLatitude(41.4934133); mockLocation.setLongitude(-23.8729252); mockLocation.setAccuracy(1.0f); mockLocation.setTime(new Date().getTime()); } else { mockLocation.setLatitude(mockLocation.getLatitude() + 0.00003); mockLocation.setLongitude(mockLocation.getLongitude() + 0.00001); mockLocation.setTime(new Date().getTime()); } return mockLocation; } private void mockLocation() { LocationServices.FusedLocationApi.setMockMode(clientApi, true); LocationServices.FusedLocationApi.setMockLocation(clientApi, createMockLocation()); final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new Runnable() { public void run() { LocationServices.FusedLocationApi.setMockLocation(clientApi, createMockLocation()); // Log.d("MockLocation", // "mockLocation: Lat:"+mockLocation.getLatitude()+" Long:"+mockLocation.getLongitude()); } }, 0, NORMAL_INTERVAL, TimeUnit.MILLISECONDS); }
Con este método obtendrá una posición de actualización cada NORMAL_INTERVAL en ms.
Espero que esto ayude :).
- Activar simultáneamente la interfaz wifi y 3G en Android
- ¿Cómo puedo leer libros PDF con la animación de curl de página en android?