Pertanyaan Bagaimana cara menangkap SecurityException untuk izin lokasi


Saya mendapatkan kerusakan berikut pada perangkat tertentu 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)

Perhatikan itu Saya meminta izin lokasi untuk pengguna sebelum membuat operasi terkait lokasi apa pun. Tetapi untuk beberapa alasan saya tidak dapat mereproduksi, beberapa perangkat sepertinya melaporkan memiliki izin lokasi ketika saya menggunakan:

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

Karena itu, aku harus bisa menangkapnya SecurityException dan mengabaikannya ketika itu terjadi. Atau mungkin mencari cara untuk memberi tahu pengguna untuk mengaktifkan izin lokasi secara manual.

Kecelakaan di atas mulai terjadi ketika saya mulai menggunakan API baru dari Layanan Play untuk meminta lokasi menggunakan FusedLocationProviderClient. Ini macet ketika saya mencoba melakukan hal berikut tanpa izin lokasi diparut, misalnya:

LocationServices.getFusedLocationProviderClient(this).getLocationAvailability().addOnFailureListener(myListener);

Pendengar kegagalan tidak mengirim crash ke myListener sayangnya. Mengelilingi hal di atas dengan try..catch tidak berhasil juga. Yaitu., ini tidak berhasil dan aplikasi mogok juga melempar SecurityException:

try {
    LocationServices.getFusedLocationProviderClient(this)
        .getLocationAvailability()
        .addOnFailureListener(myListener);
} catch(Exception e) {
    Log.e(e);
}

Masalah ini tampaknya terkait dengan masalah berikut:

Ada ide?


5
2017-07-10 14:05


asal


Jawaban:


Sudahkah Anda mempertimbangkan fakta, bahwa beberapa pengguna mencabut izin setelah aplikasi Anda diluncurkan? Anda harus selalu memeriksa izin setiap kali sebelum memanggil metode apa pun FusedLocationProviderClient.


-1
2018-02-06 15:11