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)
https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it – CommonsWare
poprosiłem o pozwolenie typu I mogę zagwarantować, że mam pozwolenie na zapytanie o FINE i CORSE_LOCATION – marilion91
Czy to możliwe, że użytkownik odmówił zgody i źle sobie z nią poradziłeś? –