几天前,Crashlytics startet报告了我的Google Play服务位置API实现中的奇怪崩溃。连接Google Play服务API之后,我尝试使用FusedLocationApi.getLastLocation(...)获取最后一个已知位置,但是此调用以安全异常结束,告诉我我没有执行此操作的正确权限(请参阅堆栈跟踪)以下)
我确实具有运行时权限,并且此代码在大多数设备上都可以使用几个月。该错误主要发生在OnePlus One上,我可以在装有Android 6的HTC One M8上予以拒绝。
我认为该问题与Google Play服务的最新更新有关,但我无法对此进行验证。仅当禁用设备位置服务(实际上会自动从Google Play服务中删除位置权限)时,才会发生此错误,因此我认为这些设备上的最新Play服务存在会引发安全异常的错误,原因是Google Play服务没有尽管我的应用允许访问位置数据的权限。
是否有人遇到类似的问题,也许找到了更好的解决方案,然后尝试{}捕获整个问题,或者从Google获得有关此问题的任何更新?
更新:
我可以在具有Android 6.0的HTC One M8上再次进行测试,并且SecurityException还会引发启用的位置服务以及对应用程序和播放服务的授予权限。
在BALANCED_POWER和HIGH_ACCURACY之间切换除了将异常消息更改为
文件访问权限没有问题,使用Android LocationManager的我的后备实现不会引发SecurityException,但是仅在将定位服务设置为gps时才确定位置。
有趣的事实:使用Google map 时,Google Play服务每隔几秒钟就会崩溃,并且找不到位置。只有启用gps的导航才能找到位置。
总结
带有Google Play服务9.2.56(438-124593566)的HTC One M8(Android 6.0软件版本6.12.401.4)存在位置服务的一般问题,而不仅仅是GPS。 Google Play服务FusedLocationApi的权限系统存在问题,原因是授予了权限,但引发了SecurityException。使用旧的LocationManager实现没有安全性问题,但是只有在设备设置仅设置为gps的情况下,才能确定位置。
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)
最佳答案
应该已经在Play Services 9.6 https://developers.google.com/maps/documentation/android-api/releases#september_21_2016中修复了