Android Play服务FusedLocatioAPI getLastLocation与SecurityException崩溃

几天前,Crashlytics startet在我的Google Play服务位置API实施中报告了奇怪的崩溃.连接Google Play Services API后,我尝试使用FusedLocationApi.getLastLocation(…)获取最后一个已知位置,但此调用以安全异常结束,告诉我没有正确的权限(请参阅堆栈跟踪)下面)

我确实拥有运行时权限,这段代码可以在大多数设备上运行几个月.此错误主要发生在OnePlus One上,我可以在安装了Android 6的HTC One M8上重新生成.

我认为问题与最新的谷歌播放服务更新有关,但我无法验证这一点.仅当设备位置服务被禁用(实际上自动从谷歌播放服务中删除位置权限)时才会出现此错误,因此我认为这些设备上的最新播放服务有一个错误会导致安全例外因为谷歌播放服务没有虽然我的应用程序可以访问位置数据的权限.

有没有人遇到类似的问题,也许找到了更好的解决方案然后尝试{}抓住整个事情或谷歌关于这个问题的任何更新?

更新:

我可以在带有Android 6.0的HTC One M8上再次测试这个,并且还启用SecurityException,启用位置服务和对应用程序和播放服务的grantet权限.
除非将异常消息转发到,否则在BALANCED_POWER和HIGH_ACCURACY之间切换无效

Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION
permission to perform any location operations.

文件访问权限没有问题,使用Android LocationManager的后备实现不会抛出SecurityException,但仅在位置服务设置为gps时确定位置.

有趣的事实:使用Google地图时,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中修复

September 21,2016
Resolved Issues

  • Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations. (Issue 07001)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...