ADe*_*Dev 5 android android-location google-play-services
我在某些设备API 6.0+上遇到以下崩溃:
Fatal Exception: java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.
at android.os.Parcel.readException(Parcel.java:1693)
at android.os.Parcel.readException(Parcel.java:1646)
at com.google.android.gms.internal.zzed.zza(Unknown Source)
at com.google.android.gms.internal.zzcda.zzdw(Unknown Source)
at com.google.android.gms.internal.zzcdd.zzvQ(Unknown Source)
at com.google.android.gms.internal.zzcdj.zzvQ(Unknown Source)
at com.google.android.gms.location.zzf.zza(Unknown Source)
at com.google.android.gms.internal.zzbaq.zza(Unknown Source)
at com.google.android.gms.internal.zzbdd.zzb(Unknown Source)
at com.google.android.gms.internal.zzbdd.zzqq(Unknown Source)
at com.google.android.gms.internal.zzbdd.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzaa.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzn.zzj(Unknown Source)
at com.google.android.gms.common.internal.zze.zzrj(Unknown Source)
at com.google.android.gms.common.internal.zzi.zzrk(Unknown Source)
at com.google.android.gms.common.internal.zzh.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
Run Code Online (Sandbox Code Playgroud)
请注意,在进行任何与位置相关的操作之前,我要求用户获得位置许可.但由于某种原因我无法重现,有些设备似乎在我使用时报告了位置权限:
boolean hasPermission = ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
Run Code Online (Sandbox Code Playgroud)
因此,我需要能够抓住SecurityException它并在它发生时忽略它.或者想办法告诉用户手动启用位置权限.
当我开始使用Play服务中的新API来请求位置时,上面的崩溃就开始发生了FusedLocationProviderClient.当我尝试在没有授予位置权限的情况下执行以下操作时崩溃,例如:
LocationServices.getFusedLocationProviderClient(this).getLocationAvailability().addOnFailureListener(myListener);
myListener不幸的是,失败监听器不会发送崩溃.围绕以上内容try..catch也不起作用.即,这不起作用,应用程序崩溃无论如何投掷SecurityException:
try {
LocationServices.getFusedLocationProviderClient(this)
.getLocationAvailability()
.addOnFailureListener(myListener);
} catch(Exception e) {
Log.e(e);
}
Run Code Online (Sandbox Code Playgroud)
此问题似乎与以下问题有关:
有任何想法吗?
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |