Servicios de Android Play FusedLocatioAPI getLastLocation se bloquea con SecurityException

Hace unos días, Crashlytics startet reportó fallos extraños dentro de la implementación de la API de ubicación de servicios de Google Play. Después de conectar la API de Google Play Services, intento obtener la última ubicación conocida con FusedLocationApi.getLastLocation (…) pero esta llamada termina en una excepción de seguridad diciéndome que no tengo el permiso adecuado para hacerlo (vea el rastreo de pila abajo)

Tengo los permisos del tiempo de ejecución y este código está trabajando en la mayoría de los dispositivos por algunos meses. Este error se produce principalmente en el OnePlus One y podría repoduce en un HTC One M8 con Android 6.

Creo que el problema está relacionado con la última actualización de los servicios de Google Play, pero no pude validar esto. Este error sólo se produce si los servicios de ubicación de dispositivos están deshabilitados (lo que de hecho elimina automáticamente el permiso de ubicación de los servicios de google play), así que creo que los servicios de reproducción más recientes de estos dispositivos tienen un error que genera la excepción de seguridad porque los servicios de google play no tienen El permiso para acceder a los datos de ubicación aunque mi aplicación lo haga.

¿Alguien está experimentando un problema similar y tal vez había encontrado una solución mejor, entonces intente {} capturar todo el asunto o cualquier actualización de google sobre el problema?

ACTUALIZAR:


Podría probar esto otra vez en HTC uno M8 con Android 6.0 y el SecurityException también se lanza con los servicios permitidos de la localización y los permisos del grantet a la aplicación ya los servicios del juego. Cambiar entre BALANCED_POWER y HIGH_ACCURACY no tiene ningún efecto excepto el chaning del mensaje de excepción a

El cliente debe tener permiso ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION para realizar cualquier operación de ubicación.

Acceso a archivos El permiso no tiene problemas y mi implementación de fallback que usa el Android LocationManager no arroja SecurityException, pero la ubicación solo se determina cuando los servicios de ubicación se establecen en gps solamente.

Hecho de intercesión: los servicios de Google Play se bloquean cada pocos segundos al utilizar Google Maps y no se puede encontrar ninguna ubicación. Sólo la navegación, que permite gps puede encontrar la ubicación.

En resumen El HTC One M8 (Android 6.0 Software Nr. 6.12.401.4) con Google Play Services 9.2.56 (438-124593566) tiene un problema general con los servicios de ubicación que no son sólo gps. El FusedLocationApi de Google Play Services tiene un problema con el sistema de permisos porque los permisos se dan, pero lanza SecurityException. El uso de la implementación de LocationManager antigua no tiene problemas de seguridad, pero sólo puede determinar la ubicación si la configuración del dispositivo se establece en gps solamente.


El Stacktrace:

Fatal Exception: java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations. at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at com.google.android.gms.location.internal.zzi$zza$zza.zza(Unknown Source) at com.google.android.gms.location.internal.zzk.getLastLocation(Unknown Source) at com.google.android.gms.location.internal.zzl.getLastLocation(Unknown Source) at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source) at com.google.android.gms.location.internal.zzd$1.zza(Unknown Source) at com.google.android.gms.internal.zznt$zza.zzre(Unknown Source) at com.google.android.gms.internal.zzoc.connect(Unknown Source) at com.google.android.gms.internal.zzoc.zzd(Unknown Source) at com.google.android.gms.internal.zzoh.zzd(Unknown Source) at com.google.android.gms.internal.zzof.zzd(Unknown Source) at com.google.android.gms.location.internal.zzd.getLastLocation(Unknown Source) at com.my.package.location.PlayServicesLocationFinder.onConnected(PlayServicesLocationFinder.java:74) at com.google.android.gms.common.internal.zzl.zztI(Unknown Source) at com.google.android.gms.internal.zzof.zzc(Unknown Source) at com.google.android.gms.internal.zzod.zzsb(Unknown Source) at com.google.android.gms.internal.zzod.begin(Unknown Source) at com.google.android.gms.internal.zzoh.zzc(Unknown Source) at com.google.android.gms.internal.zznw.onConnected(Unknown Source) at com.google.android.gms.common.internal.zzk$1.onConnected(Unknown Source) at com.google.android.gms.common.internal.zzd$zzj.zzl(Unknown Source) at com.google.android.gms.common.internal.zzd$zza.zztp(Unknown Source) at com.google.android.gms.common.internal.zzd$zza.zztp(Unknown Source) at com.google.android.gms.common.internal.zzd$zze.zztr(Unknown Source) at com.google.android.gms.common.internal.zzd$zzd.handleMessage(Unknown Source) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Debe arreglarse ahora, en Play Services 9.6 https://developers.google.com/maps/documentation/android-api/releases#september_21_2016

21 de septiembre de 2016
Problemas resueltos

  • El cliente debe tener permiso ACCESS_FINE_LOCATION para solicitar ubicaciones PRIORITY_HIGH_ACCURACY. (Número 10166 )
  • No se puede crear la compilación de la versión tras actualizar los servicios de reproducción a 8.3.0
  • ¿Cómo abrir el mensaje Activar Bluetooth desde Google Play Services?
  • Plus.PeopleApi.getCurrentPerson obsoleta en los servicios de Play 8.4. ¿Cómo obtener el nombre, apellido y sexo del usuario usando GoogleSignInApi?
  • Obtenga los detalles de la persona en la nueva conexión de Google Play Services 8.3
  • Necesita usar un tema Theme.AppCompat (o descendiente) con esta actividad después de agregar google-play-services
  • Cómo evitar el límite de 65k método al utilizar Google Play Services
  • El enlace "Instalar" de AppInvites no abre la aplicación
  • Android play services 6.5: LocationClient falta
  • Varios Proguard nuevas publican los servicios de Google Play v10.2.6 a v11.0.0 en un proyecto Multidex
  • ¿Por qué barcodedetector y las API asociadas son tan poco fiables?
  • Google AppInvite: el correo electrónico no se envía mientras SMS se envía
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.