Сервисы Android Play FusedLocatioAPI getLastLocation аварийно завершают работу с SecurityException

Несколько дней назад Crashlytics начал сообщать о странных сбоях в моей реализации API определения местоположения сервисов Google Play. После подключения API сервисов Google Play я пытаюсь получить последнее известное местоположение с помощью FusedLocationApi.getLastLocation(...), но этот вызов заканчивается исключением безопасности, сообщающим мне, что у меня нет прав для этого (см. трассировку стека ниже)

У меня есть права выполнения, и этот код работает на большинстве устройств уже несколько месяцев. Эта ошибка возникает в основном на OnePlus One, и я могу воспроизвести ее на HTC One M8 с Android 6.

Я думаю, что проблема связана с последним обновлением сервисов Google Play, но я не смог это проверить. Эта ошибка возникает только в том случае, если службы определения местоположения устройств отключены (что фактически автоматически удаляет разрешение на определение местоположения из служб Google Play), поэтому я думаю, что в новейших игровых службах на этих устройствах есть ошибка, которая вызывает исключение безопасности, потому что службы Google Play не имеют разрешение на доступ к данным о местоположении, хотя мое приложение делает это.

Кто-нибудь сталкивался с похожей проблемой и, возможно, нашел лучшее решение, а затем попытался {}уловить все это или какие-либо обновления от Google по этой проблеме?

ОБНОВЛЕНИЕ:


Я мог бы проверить это еще раз на HTC One M8 с Android 6.0, и SecurityException также выдается с включенными службами определения местоположения и предоставлением разрешений для приложений и игровых сервисов. Переключение между BALANCED_POWER И HIGH_ACCURACY не имеет никакого эффекта, кроме изменения сообщения об исключении на

Клиент должен иметь разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION для выполнения любых операций с местоположением.

Разрешение на доступ к файлам не имеет проблем, и моя резервная реализация, которая использует Android LocationManager, не выдает SecurityException, но местоположение определяется только тогда, когда службы определения местоположения настроены только на gps.

Интересный факт: сервисы Google Play аварийно завершают работу каждые несколько секунд при использовании Google Maps, и местоположение не может быть найдено. Только навигация, которая включает GPS, может найти местоположение.

Подводя итоги В HTC One M8 (программное обеспечение Android 6.0 № 6.12.401.4) с сервисами Google Play 9.2.56 (438-124593566) есть общая проблема со службами определения местоположения, которые не являются только GPS. У сервисов Google Play FusedLocationApi есть проблема с системой разрешений, потому что разрешения даны, но выдает исключение SecurityException. Использование старой реализации LocationManager не имеет проблем с безопасностью, но может определять местоположение только в том случае, если в настройках устройства установлено значение только GPS.


Трассировка стека:

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)

comment
stackoverflow.com/questions/32635704/   -  person CommonsWare    schedule 28.06.2016
comment
Я запросил разрешение и могу гарантировать, что у меня есть разрешение запрашивать FINE и CORSE_LOCATION.   -  person marilion91    schedule 28.06.2016
comment
Возможно ли, что пользователь отказал в разрешении, и вы обработали его неправильно?   -  person Tim    schedule 28.06.2016
comment
@TimCastelijns это была моя первая мысль, какой-то странный взлом мода oneplus cynagen, который странным образом отключил разрешение, но я дважды проверил, что у меня есть разрешение, и все было, как и ожидалось, единственное, что я заметил, это отсутствие разрешения на сервисы Google Play, которые могли можно включить, только включив службы определения местоположения устройства. тот же код на моей галактике s6 не имеет сбоев, и он дает уведомление о том, что службы определения местоположения отключены   -  person marilion91    schedule 28.06.2016
comment
У меня есть oneplus one. Раньше я не сталкивался с такой проблемой. Знаете ли вы, модифицирован ли тот, который вы тестировали, или нет?   -  person Tim    schedule 28.06.2016
comment
@TimCastelijns Я тестировал HTC One M8 со стоковой прошивкой, насколько я знаю, никаких модификаций. Службы Google Play версии 9.2.56 (438-....), к сожалению, мой коллега должен был уйти раньше, и это было его устройство.   -  person marilion91    schedule 28.06.2016
comment
У меня стандартный OnePlus, и я подтверждаю исключение игровых сервисов и некоторых зависимых приложений. Что касается взлома разрешений, цель состояла в том, чтобы решить проблему с разрядкой батареи, и раньше это работало хорошо.   -  person juherr    schedule 30.06.2016
comment
Та же проблема здесь. Но так было и с другими устройствами (OnePlus, LGE, Xiaomi, Nexus 5X). Общая точка, кажется, GPS 9.2.56 и Android 6.0.x   -  person P1x    schedule 07.07.2016
comment
Об этом сообщается здесь: проблемы gmaps-api-isses. 10166   -  person Richard Le Mesurier    schedule 10.08.2016


Ответы (1)


должно быть исправлено сейчас, в Play Services 9.6 https://developers.google.com/maps/documentation/android-api/releases#september_21_2016

21 сентября 2016 г.
Решенные проблемы

  • Клиент должен иметь разрешение ACCESS_FINE_LOCATION для запроса местоположений PRIORITY_HIGH_ACCURACY. (Выпуск 10166)
person nGL    schedule 04.10.2016