/ / Jak obsługiwać uprawnienie ACCESS_FINE_LOCATION na Androidzie 6.0? [duplikat] - Android, lokalizacja

Jak obsłużyć uprawnienia ACCESS_FINE_LOCATION w systemie Android 6.0? [duplikat] - android, lokalizacja

Kiedy uruchamiam usługę LocationService na urządzeniu z Androidem w wersji 6.0 lub wyższej, pojawia się następujący błąd:

java.lang.SecurityException: Klient musi mieć uprawnienia ACCESS_FINE_LOCATION, aby zażądać lokalizacji PRIORITY_HIGH_ACCURACY. w android.os.Parcel.readException (Parcel.java:1620) w android.os.Parcel.readException (Parcel.java:1573) na com.google.android.gms.internal.ni $ a $ a.a (Nieznane źródło) na com.google.android.gms.internal.nj.a (nieznane źródło) na com.google.android.gms.internal.nk.a (nieznane źródło) na com.google.android.gms.internal.nf $ 1.a (Nieznane źródło) na com.google.android.gms.internal.nf $ 1.a (Nieznane źródło) na com.google.android.gms.common.api.BaseImplementation $ a.b (Nieznane źródło) na com.google.android.gms.common.api.c.a (Nieznane źródło) na com.google.android.gms.common.api.c.b (nieznane źródło) na com.google.android.gms.internal.nf.requestLocationUpdates (nieznane źródło) na com.google.android.gms.internal.jm.f (nieznane źródło) na com.google.android.gms.common.api.c.gJ (nieznane źródło) na com.google.android.gms.common.api.c.d (nieznane źródło) na com.google.android.gms.common.api.c $ 2.onConnected (nieznane źródło) na com.google.android.gms.internal.jm.f (nieznane źródło) na com.google.android.gms.internal.jm.dU (nieznane źródło) na com.google.android.gms.internal.jl $ h.b (Nieznane źródło) na com.google.android.gms.internal.jl $ h.g (Nieznane źródło) at com.google.android.gms.internal.jl $ b.hy (Nieznane źródło) na com.google.android.gms.internal.jl $ a.handleMessage (nieznane źródło) na android.os.Handler.dispatchMessage (Handler.java:102) na android.os.Looper.loop (Looper.java:148) w android.app.ActivityThread.main (ActivityThread.java:5466) at java.lang.reflect.Method.invoke (metoda rodzima) w com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) w com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Ustawiłem potrzebne premie w Manifest.xml! Potem przeczytałem, że premie są sprzedawane inaczej w Androidzie 6.0, ale jak mogę poprosić użytkownika o zaakceptowanie lub ustawienie wymaganych premii dla aplikacji?

Jakieś sugestie?

Odpowiedzi:

2 dla odpowiedzi № 1

Najpierw sprawdź, czy zezwolenie zostało już udzielone

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 108);
return;
} else {
//continueYourTask
}

Jeśli nie zostanie przyznane, automatycznie wyświetli okno dialogowe umożliwiające przyznanie dostępu, a po przyznaniu oddzwonienie zostanie odebrane jako

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 108:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//continueYourTask
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}