La aplicación de Android no puede acceder a la ubicación en el emulador mediante FusedLocationApi

Tengo una aplicación de Android que obtiene la ubicación:

private LocationRequest createLocationRequest() { LocationRequest mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(120000); mLocationRequest.setFastestInterval(60000); mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); return mLocationRequest; } private GoogleApiClient getLocationApiClient(){ return new GoogleApiClient.Builder(App.instance) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } ... apiClient = getLocationApiClient(); apiClient.connect(); @Override public void onConnected(@Nullable Bundle bundle) { ... LocationRequest locationRequest = createLocationRequest(); LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, new LocationListener() { @Override public void onLocationChanged(Location newLocation) { //***THIS IS NEVER CALLED ON EMULATOR*** } }); } 

Cuando se ejecuta en el dispositivo (Galaxy S3, Android 4.4.4) no hay ningún problema en absoluto. Cuando se ejecuta en el emulador (Android Studio qemu por defecto, Android 7.1, x86-64) No estoy consiguiendo la ubicación en mi aplicación. onConnected se llama, incluso puedo leer la última ubicación, aunque no obtendré ninguna actualización de ubicación ( requestLocationUpdates finalización nunca llamado).

He:

  • Se ha añadido <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> para manifestarse (además de la ubicación gruesa y fina).
  • Se intentó cambiar la configuración de la ubicación de Google en el emulador (alta precisión, ahorro de batería, sólo dispositivo)
  • Se intentó establecer la ubicación de la interfaz gráfica de usuario del emulador.
  • Se ha activado y desactivado la opción "Usar ubicación ADB detectada" del emulador.
  • Probado adb -s emulator-5555 emu geo fix 12.34 56.78 (comando funciona, sigue leyendo para ver por qué)

Todavía no puedo obtener mi aplicación para obtener una actualización de la ubicación. He intentado el emulador incorporado en Google Maps y recibe actualizaciones de ubicación a la perfección, puedo ver la posición actual en el mapa de inmediato cambiar cuando envío coordenadas diferentes a través de geo fijar.

Pero mi aplicación no tiene conocimiento de las actualizaciones de ubicación. He intentado esperar al menos 2 minutos (mi intervalo de solicitud de ubicación) antes de enviar otra coordenada también. ¿Qué estoy haciendo mal?

He funcionado en el mismo problema en el emulador. La única solución que he encontrado es usar PRIORITY_HIGH_ACCURACY.

Explicación: Es la única opción que obligará a Android a activar el chip GPS (chip virtual en el caso del emulador). En un dispositivo real esto no es un problema porque el teléfono puede utilizar la recepción de la célula y wifi para averiguar una ubicación aproximada. En el emulador no hay recepción celular y el wifi se abstrae como una conexión de red. Por lo tanto, el emulador puede utilizar el GPS para su ubicación.

Si realmente no desea utilizar PRIORITY_HIGH_ACCURACY en su aplicación real, puede crear (o buscar una aplicación de ejemplo) FusedLocationApi con la precisión establecida en PRIORITY_HIGH_ACCURACY. Ejecútelo antes de ejecutar su aplicación real (PRIORITY_BALANCED_POWER_ACCURACY) y habrá una última ubicación conocida disponible.

  • Uso de TelephonyManager para obtener SIM CÓDIGO DE PAÍS - ¿Cómo?
  • RequestLocationUpdates no se actualiza en intervalos en Android
  • Compruebe si el usuario ha activado GPS después de
  • Android-Java: location.getTime () devuelve UTC-1 en lugar de UTC si el huso horario actual es "ahorro de luz del día"
  • Getlastknownlocation siempre devuelve null después de reinstalar el archivo apk a través de eclipse
  • ¿ICS Android habilita los gps de forma programática?
  • ¿Cómo estima Google mi ubicación sin GPS?
  • Obtener el nombre de ubicación actual del usuario sin necesidad de utilizar gps o Internet, sino mediante Network_Provider en android
  • Rotar un ImageView para hacer frente a una posición dada en latitud y longitud
  • Qt5 QGeoPositionInfoSource :: createDefaultSource () se bloquea en Android 5.0
  • Obtener el nombre de la ciudad de la latitud y la longitud en androide da servicio no disponible Android 4.0.3?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.