5

Kilka dni temu Crashlytics rozpoczyna zgłaszanie dziwnych awarii w mojej implementacji interfejsu Google Maps Services Location. Po podłączeniu interfejsu API usług Google Play próbuję uzyskać ostatnią znaną lokalizację za pomocą FusedLocationApi.getLastLocation (...), ale to wywołanie kończy się w Wyjątku bezpieczeństwa, który mówi mi, że nie mam odpowiednich uprawnień do tego (zobacz stos śledzenia poniżej)Usługi Android Play FusedLocatioAPI getLastLocation ulega awarii dzięki SecurityException

Mam uprawnienia wykonawcze i ten kod działa na większości urządzeń przez kilka miesięcy. Ten błąd występuje głównie na OnePlus One i mógłbym go ponownie załadować na HTC One M8 z systemem Android 6.

Myślę, że problem jest związany z najnowszą aktualizacją usług Google Play, ale nie mogłem tego sprawdzić. Ten błąd występuje tylko wtedy, gdy usługi lokalizacji urządzeń są wyłączone (co faktycznie powoduje automatyczne usunięcie uprawnień do lokalizacji z usług Google Play), więc myślę, że najnowsze usługi odtwarzania na tych urządzeniach mają błąd powodujący wyjątek bezpieczeństwa, ponieważ usługi Google Play nie mają zezwolenie na dostęp do danych o lokalizacji, mimo że moja aplikacja to robi.

Czy ktoś ma podobny problem i może znalazł lepsze rozwiązanie, a następnie spróbuj {} złapać całą rzecz lub jakąkolwiek aktualizację z Google'a dotyczącą problemu?

UPDATE:


mogłem przetestować ponownie na HTC One M8 z Androidem 6.0 i SecurityException także wyrzucony z włączonymi usług lokalizacyjnych i pozwoleń grantet do aplikacji i usług zabaw. Przełączanie BALANCED_POWER I HIGH_ACCURACY ma żadnego efektu oprócz chaning komunikat wyjątku do

klient musi mieć ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION uprawnienia do wykonywania jakichkolwiek czynności lokalizacji.

dostępu do plików Pozwolenie nie ma problemów i moje wykonanie zastępczej, która useses Android LocationManager nie rzuca SecurityException ale lokalizacja jest określana tylko wtedy, gdy usługi lokalizacyjne ustawić tylko GPS.

Interesujący fakt: Usługi Google Play ulegają awarii co kilka sekund podczas korzystania z Map Google i nie można znaleźć żadnej lokalizacji. Tylko nawigacja, która włącza GPS, może znaleźć lokalizację.

Podsumowując HTC One M8 (Android 6.0 Software Nr. 6.12.401.4) z usługi Google Play 02/9/56 (438-124593566) ma ogólny problem z usług lokalizacji, która nie tylko GPS. Usługa FusedLocationApi Usług Google Play powoduje problem z systemem uprawnień, ponieważ uprawnienia są udzielane, ale generuje wyjątek SecurityException. Używanie starej implementacji LocationManager nie ma problemów z bezpieczeństwem, ale może określić lokalizację, tylko jeśli ustawienia urządzenia są ustawione tylko na GPS.


The 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

poprosiłem o pozwolenie typu I mogę zagwarantować, że mam pozwolenie na zapytanie o FINE i CORSE_LOCATION – marilion91

+0

Czy to możliwe, że użytkownik odmówił zgody i źle sobie z nią poradziłeś? –

Odpowiedz