Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


OnLocationChanged no ha llamado a algunos dispositivos

Esta es una pregunta que se ha hecho muchas veces pero no pude encontrar una solución que siempre funciona.

Estoy desarrollando una aplicación usando el proveedor de ubicación fusionado. En el método onConnected() , estoy solicitando actualizaciones de ubicación y la lógica de la aplicación se iniciará una vez que se genere una corrección de ubicación y se onLocationChanged() . (Por favor refiérase a mi código abajo).

  • ¿Por qué tengo un accidente al salir de mi actividad?
  • Estilo de la casilla de verificación de Android
  • ¿Hay alguna manera de agregar extras a Intent de preferencias?
  • ¿Cómo lidiar con la eliminación de un permiso para un receptor de difusión en Android M?
  • Cómo detectar sólo el navegador nativo de Android
  • Obtener contexto dentro de onClick (DialogInterface v, int buttonId)?
  • El problema onLocationChanged() método nunca se llama en algunos dispositivos. Yo uso un Samsung Tab 2 y un Samsung Galaxy Grand para las pruebas. Este código funciona perfectamente bien en la ficha 2 pero no funciona en Grand. Por no funciona, quiero decir que locationClient se conecta pero onLocationChanged() nunca se llama.

    Anteriormente, usé el administrador de ubicación para obtener ubicación y en esa implementación, el mismo problema ocurrió. Por lo tanto, traté de implementar el proveedor de ubicación fusionada, pero todavía tengo el mismo problema.

    ¿Puede alguien ayudarme con este problema? ¿Hay algo que me falta aquí?

     public class MainActivity extends Activity implements GooglePlayServicesClient.ConnectionCallbacks, OnConnectionFailedListener, LocationListener { LocationClient locationclient; LocationRequest lr; Location loc1; static String address; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationclient = new LocationClient(this,this,this); locationclient.connect(); } @Override public void onConnected(Bundle arg0) { // TODO Auto-generated method stub lr=LocationRequest.create(); lr.setInterval(100); locationclient.requestLocationUpdates(lr, this); Log.d("LocationClient","On Connected"); } @Override public void onDisconnected() { // TODO Auto-generated method stub locationclient.disconnect(); } @Override public void onConnectionFailed(ConnectionResult arg0) { // TODO Auto-generated method stub } @Override public void onLocationChanged(Location loc) { // TODO Auto-generated method stub // Application Logic Log.d("LocationClient","Last Known Location LC:" + loc.getLatitude() + "," + loc.getLongitude()); } } 

  • Intervalo de tiempo de conexión BLE de Android
  • Detección de objetos Android OpenCV
  • Cómo configurar una dirección IP estática, máscara de red, puerta de enlace mediante programación en Android 3.xo 4.x
  • Bitmaps en Android
  • Fácil manera de ocultar la barra del sistema en Android ICS
  • Espresso - Ejecutar acción falla en la actividad de pantalla completa - InjectEventSecurityException
  • 7 Solutions collect form web for “OnLocationChanged no ha llamado a algunos dispositivos”

    onLocationChanged() mismo comportamiento en Galaxy Nexus y reconoció dos cosas causando onLocationChanged() a no ser llamado. Existen

    1. La fuente de ubicación correspondiente no está habilitada en Configuración del sistema. Para PRIORITY_HIGH_ACCURACY los satélites GPS deben estar habilitados, para PRIORITY_BALANCED_POWER_ACCURACY ubicación de red Wi-Fi y móvil debe estar habilitada.

    2. Incluso para las fuentes de ubicación activadas no puede haber información de ubicación válida disponible. Por ejemplo, la fuente PRIORITY_HIGH_ACCURACY está habilitada, pero no hay (o no es buena) recepción GPS (por ejemplo, el dispositivo está dentro de un edificio). O bien, la fuente PRIORITY_BALANCED_POWER_ACCURACY está habilitada, pero los datos Wi-Fi y móviles están apagados. En esos casos no se puede detectar la onLocationChanged() y onLocationChanged() no se llamará.

    Para corregir # 1 tuve que comprobar si las fuentes de ubicación requeridas están habilitadas incluso antes de conectarse a la API de Servicios de Google y si están apagadas, entonces notificé a un usuario que le pidiera que permitiera el acceso a la ubicación.

    Para resolver # 2 decidí usar LocationRequest.setExpirationDuration() . He establecido el tiempo de espera en unos 10 segundos, e inmediatamente después de llamar a requestLocationUpdates() publicar una devolución de llamada retrasado por los mismos 10 segundos. Si se llama a devolución de llamada retrasada antes requestLocationUpdates() , significa que no se puede detectar la ubicación debido a la razón # 2. Hago tres intentos y luego muestro al usuario un mensaje de error.

    La documentación de Android no es muy buena en este lugar, por eso espero que esto ayude.

     lr.setInterval(100); 

    Con él su intervalo es 0,1 segundo por lo que es muy difícil para el chipset gps para detectar la ubicación. Su intervalo debe ser> 1 segundo (conmigo es> 10)

    LocationRequest se debe establecer:

    setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) porque PRIORITY_BALANCED_POWER_ACCURACY en exterior no consigue ubicación. El código se verá así:

     lr=LocationRequest.create(); lr.setInterval(5 * 1000);// 5s lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationclient.requestLocationUpdates(lr, this); 

    Espero que esto ayude.

    Vea si está recibiendo una ubicación pasada probando si (loc == null). A pesar de que es el mismo proveedor, tal vez un dispositivo está volviendo nulo y bombardeo, lo que resulta en una mirada como no está disparando.

    Esto quizás no-sentido pero he hecho frente a este problema antes, alguien sugirió que usted debe crear su propio LocationListener vez de dejar su MainActivity implementa LocationListener . Básicamente esto:

     locationclient.requestLocationUpdates(lr, your_location_listener); 

    Espero que esto ayude.

    He resuelto esto mediante la configuración de ambos parámetros, la distancia mínima y el tiempo mínimo entre las actualizaciones a 0. Según lo que he probado en 2 dispositivos, ahora onLocationChanged () se llama regularmente después de solicitar actualizaciones.

    Intente eliminar y reinstalar " google play services ". Instalar desde el enlace de mercado de Google , servicios de Google Play

    Compruebe este código …

     public class MyActivity extends Activity implements LocationListener { double destLat, destLong; LocationManager locationManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub destLat = location.getLatitude(); destLong = location.getLongitude(); } @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 } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.