5

Alcuni giorni fa Crashlytics ha iniziato a segnalare arresti anomali all'interno della mia implementazione API di posizione dei servizi di Google Play. Dopo aver collegato l'API di Google Play Services, provo a ottenere l'ultima posizione nota con FusedLocationApi.getLastLocation (...) ma questa chiamata termina in un'eccezione di sicurezza che mi dice che non ho il permesso per farlo (vedi stack trace di seguito)Servizi di riproduzione Android FusedLocatioAPI getLastLocation si arresta in modo anomalo con SecurityException

Ho le autorizzazioni di runtime e questo codice funziona sulla maggior parte dei dispositivi per alcuni mesi. Questo errore si verifica principalmente su OnePlus One e potrei riprodurlo su un HTC One M8 con Android 6.

Penso che il problema sia correlato all'ultimo aggiornamento di Google Play Services ma non ho potuto convalidarlo. Questo errore si verifica solo se i servizi di localizzazione dei dispositivi sono disabilitati (che in realtà rimuove automaticamente l'autorizzazione di posizione dai servizi di google play) quindi penso che i nuovi servizi di riproduzione su questi dispositivi abbiano un bug che genera l'eccezione di sicurezza che i servizi di google play non hanno il permesso di accedere ai dati sulla posizione anche se la mia app lo fa.

Qualcuno sta riscontrando un problema simile e forse ha trovato una soluzione migliore, quindi prova {} a catturare il tutto o qualsiasi aggiornamento da Google sul problema?

UPDATE:


ho potuto testare di nuovo su HTC One M8 con Android 6.0 e il SecurityException viene anche lanciata con servizi abilitati di localizzazione e le autorizzazioni grantet al app e dei servizi di gioco. Passaggio da BALANCED_POWER E HIGH_ACCURACY non ha alcun effetto tranne chaning il messaggio di eccezione per

client deve avere ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION il permesso di eseguire qualsiasi operazione di localizzazione.

accesso File Permission non ha problemi e la mia implementazione di riserva che useses la LocationManager Android non getta alcuna SecurityException, ma la posizione è determinata solo quando i servizi di localizzazione impostati solo al GPS.

Interessante fatto: Google Play Services si blocca ogni pochi secondi quando si utilizza Google Maps e non è possibile trovare alcuna posizione. Solo navigazione, che consente ai gps di trovare la posizione.

In sintesi L'HTC One M8 (Android 6.0 Software Nr. 6.12.401.4) con Google Play Services 9.2.56 (438-124593566) ha un problema generale con i servizi di localizzazione che non sono solo GPS. I servizi di Google Play Services FusedLocationApi presentano un problema con il sistema di autorizzazione che causa le autorizzazioni ma genera una SecurityException. L'uso della vecchia implementazione di LocationManager non ha problemi di sicurezza, ma può determinare solo la posizione se le impostazioni del dispositivo sono impostate solo su GPS.


Lo 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) 
+0

https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it – CommonsWare

+0

ho chiesto il permesso un I posso garantire che ho il permesso di chiedere FINE e CORSE_LOCATION – marilion91

+0

È possibile che l'utente abbia negato il permesso e l'hai gestito in modo errato? –

risposta