ubicación ubicacion quitar permisos localización icono desde desactivar como celular cambiar activar android android-emulator location fusedlocationproviderapi android-fusedlocation

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



desactivar ubicación (1)

Me he encontrado con 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 usar la recepción de la célula y el wifi para averiguar una ubicación aproximada. En el emulador no hay recepción de celular y el wifi se abstrae como una simple conexión de red. Entonces, el emulador puede usar el GPS solo por ubicación.

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

Tengo una aplicación de Android que obtiene 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. Cuando se ejecuta en el emulador (Android Studio predeterminado qemu, Android 7.1, x86-64) no obtengo la ubicación en mi aplicación. se llama a onConnected , incluso puedo leer la última ubicación, aunque no obtendré ninguna actualización de ubicación (la finalización de requestLocationUpdates nunca se llamó).

He:

  • Se agregó <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> para manifestar (además de la ubicación gruesa y fina).
  • Intenté cambiar la configuración de ubicación de Google en el emulador (alta precisión, ahorro de batería, solo dispositivo)
  • Intenté la ubicación de configuración desde la GUI del Emulador.
  • Intentó activar y desactivar la opción "Usar ubicación de ADB detectada" del emulador.
  • Intentó adb -s emulator-5555 emu geo fix 12.34 56.78 (el comando funciona, sigue leyendo para ver por qué)

Todavía no puedo obtener mi aplicación para obtener una actualización de ubicación. Probé el Google Maps integrado en el emulador y las actualizaciones de ubicación se obtienen a la perfección, puedo ver que la posición actual en el mapa cambia inmediatamente cuando envío diferentes coordenadas a través de la corrección geográfica.

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