2017-07-10 25 views
4

我越來越對某些設備API 6.0+下列崩潰:如何捕捉拋出:SecurityException的位置許可

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) 

注意我要求的位置權限的用戶進行相關操作任何位置之前。但由於某些原因,我不能重現,有些設備似乎有報告位置的權限,當我使用:

boolean hasPermission = ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; 

正因爲如此,我需要能夠趕上SecurityException,而忽略它,當它發生。或者可能想出一種方法來告訴用戶手動啓用位置權限。

當我開始使用播放服務中的新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); 
} 

這個問題似乎涉及到以下幾個問題:

任何想法?

+0

你想在try/catch中捕捉什麼? –

+0

請檢查你的明天有一段時間它發生忘記在清單允許。 –

+0

我有清單中的權限。該應用適用於我嘗試的所有設備。我只在crashlytics上看到上述問題。 – ADev

回答

0

您是否考慮過這樣的事實:某些用戶在您的應用程序啓動後撤銷權限?在調用FusedLocationProviderClient中的任何方法之前,您應該每次檢查權限。

+0

是的,我檢查每次活動的'onResume()'是否存在權限。我在我的問題中強調了這一點:「在進行任何位置相關操作之前,我要求用戶提供位置許可」 – ADev

相關問題