Obecnie pracuję nad aplikacją, która wymaga kilku „niebezpiecznych” uprawnień. Próbowałem więc dodać „zapytaj o pozwolenie” zgodnie z wymaganiami w Android Marshmallow (poziom API 23), ale nie mogłem znaleźć, jak to zrobić.
Jak mogę poprosić o pozwolenie przy użyciu nowego modelu uprawnień w mojej aplikacji?
Odpowiedzi:
Otwórz okno dialogowe, używając poniższego kodu:
Uzyskaj wynik działania, jak poniżej:
Więcej informacji: https://developer.android.com/training/permissions/requesting.html
źródło
ActivityCompat.requestPermissions
przestarzałe? (w Nugat)Ta struktura, której używam, aby sprawdzić, czy moja aplikacja ma uprawnienia, a następnie zapytać, czy nie ma uprawnień. Więc w moim głównym kodzie, z którego chcę sprawdzić, napisz:
Moduł checkIfAlreadyhavePermission () jest zaimplementowany jako:
Moduł requestForSpecificPermission () jest zaimplementowany jako:
i Zastąp w działaniu:
Więcej informacji znajdziesz w tym linku: http://revisitingandroid.blogspot.in/2017/01/how-to-check-and-request-for-run-time.html
źródło
checkIfAlreadyhavePermission
celureturn result == PackageManager.PERMISSION_GRANTED;
Użyłem tego opakowania (zalecane) napisanego przez programistów Google. Jest bardzo łatwy w użyciu.
https://github.com/googlesamples/easypermissions
Funkcja zajmująca się sprawdzaniem i pytaniem o zgodę w razie potrzeby
Miłego kodowania :)
źródło
Począwszy od Androida Marshmallow, musimy poprosić użytkownika o określone uprawnienia. Możemy również sprawdzić kod, czy zezwolenie zostało już udzielone. Oto lista najczęściej potrzebnych uprawnień:
Oto przykładowy kod do sprawdzania uprawnień:
źródło
Moja klasa dotycząca uprawnień w czasie wykonywania żądań w
Activity
lubFragment
Pomaga również w pokazaniu uzasadnienia lub otwarciu ustawienia, aby włączyć uprawnienia po tym, jak użytkownik odmówił pozwolenia (z
Never ask again
opcją / bez )Używanie w
Activity
likeKod na Githubie
Próbny
źródło
Android-M tj. API 23 wprowadziło uprawnienia środowiska uruchomieniowego w celu zmniejszenia luk w zabezpieczeniach na urządzeniu z systemem Android, gdzie użytkownicy mogą teraz bezpośrednio zarządzać uprawnieniami aplikacji w czasie wykonywania. Więc jeśli użytkownik odmówi określonego uprawnienia aplikacji, należy je uzyskać, pytając okno dialogowe uprawnień o którym wspomniałeś w swoim zapytaniu.
Więc sprawdzić przed działaniem czyli sprawdzić masz uprawnienia dostępu do zasobów łącza i jeśli aplikacja nie posiada tej szczególnej zgody można wystąpić o pozwolenie łącza i obsłużyć uprawnienia żądać odpowiedzi jak poniżej.
Na koniec dobrą praktyką jest przechodzenie przez zmiany zachowania, jeśli planujesz pracować z nowymi wersjami, aby uniknąć wymuszonego zamknięcia :)
Sprawdzone metody dotyczące uprawnień.
Możesz przejść przez oficjalną przykładową aplikację tutaj .
źródło
Z Androida Marshmallow (API 23) i nowszych domyślnie wszystkie niebezpieczne uprawnienia (zgodnie z oficjalnym dokumentem oficjalnym ) są wyłączone. Po instalacji, gdy aplikacja jest otwierana po raz pierwszy, musisz przyznać uprawnienia w czasie wykonywania.
Osiągnąłem to w następujący sposób:
W Twojej klasie aktywności:
źródło
Dodaj uprawnienia do pliku AndroidManifest.xml
Aby sprawdzić wersję Androida, czy wymaga uprawnień wykonawczych, czy nie.
Poproś użytkownika o przyznanie pozwolenia, jeśli nie zostało przyznane.
Zrób coś, jeśli pozwolenie zostało udzielone lub nie.
źródło
Używam tego jako podstawowej klasy Fragment. Proszę tylko o uprawnienia od fragmentu, ale możesz go refaktoryzować i stworzyć podobną wersję Activity.
Istnieją dwie kluczowe metody, których powinieneś użyć:
hasPermissionOrWillAsk - użyj tego, aby sprawdzić, czy użytkownik poprosił o pozwolenie i odmówił mu zgody przez użytkownika, który nie chce być pytany ponownie. Jest to przydatne do wyłączania interfejsu użytkownika, gdy użytkownik podał ostateczną odpowiedź, że NIE chce mieć funkcji.
runNowOrAskForPermissionsFirst - służy do uruchamiania kodu wymagającego uprawnień. Jeśli użytkownik już udzielił pozwolenia, kod zostanie uruchomiony natychmiast. W przeciwnym razie kod zostanie uruchomiony później, jeśli użytkownik udzieli uprawnień. Albo wcale. To miłe, ponieważ podajesz kod w jednym miejscu.
Oto przykład:
Chętnie otrzymam opinię na ten temat. Nie chodzi o to, że ten konkretny przykład jest trochę uproszczony, ponieważ musisz również sprawdzić, czy usługi lokalizacji są włączone na urządzeniu. (To coś innego niż uprawnienia). Ponadto obsługuje tylko jedno zezwolenie na raz, ale można go łatwo zmodyfikować, jeśli potrzebujesz, aby obsługiwał więcej niż jedno na raz.
źródło
To może być czystszy sposób. Dodaj wszystkie swoje uprawnienia w tablicy, takiej jak
Niezależnie od twoich uprawnień, utwórz metodę dla każdego uprawnienia
Wywołaj tę metodę w onCreate
Teraz zastąp onRequestPermissionsResult
źródło
Możesz użyć tego dla wielu uprawnień naraz. Ta praca dla mnie .. Mam inne rozwiązanie. jeśli podasz swoją targetSdkVersion poniżej 22, to działa dla mnie. i zachowuje się jak uzyskiwanie pozwolenia z manifest.xml. Przetestowane i działa dla mnie.
Po więcej szczegółów. Sprawdź poniższy link
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
źródło
Aby obsłużyć uprawnienia środowiska wykonawczego, Google dostarczył projekt biblioteki. Możesz to sprawdzić tutaj https://github.com/googlesamples/easypermissions
EasyPermissions jest instalowane przez dodanie następującej zależności do pliku build.gradle:
Aby rozpocząć korzystanie z EasyPermissions, niech Twoja aktywność (lub fragment) zastąpi metodę onRequestPermissionsResult:
Tutaj znajdziesz działający przykład, jak działa ta biblioteka https://github.com/milon87/EasyPermission
źródło
Istnieje dobra biblioteka, z której można skorzystać na wypadek, gdyby trzeba było zapytać o uprawnienia, gdy usługa w tle wymaga pozwolenia. Chociaż ograniczenie biblioteki polega na tym, że nie można jej użyć do określenia, czy aplikacja ma obecnie uprawnienia, czy nie. Zawsze pyta użytkownika, czy aplikacja jeszcze ich nie ma.
Spróbuj, bo to ułatwia życie: uprawnienia Androida
źródło
Poniższy kod działa doskonale, wyjaśniam na przykładzie.
W moim przypadku umieściłem kontrole uprawnień osobno w klasie util i przekazałem określone uprawnienia, które muszę sprawdzić z odpowiednich klas, co umożliwiło ponowne użycie pliku util sprawdzania uprawnień w całej aplikacji.
Poniższa część kodu przedstawia wywołanie funkcji, w tym przypadku proszę o
android.Manifest.permission.READ_EXTERNAL_STORAGE
pozwolenie.W powyższym przypadku sprawdzane jest zezwolenie, czy jest dozwolone,
onAttachPressed();
wywoływana jest funkcja, w przeciwnym razie sprawdzamy żądanie uprawnienia.Poniżej znajduje się kod obecny w klasie util w moim przypadku
PermissionUtils
A po żądaniu, jeśli chcesz wywołać funkcję z
onRequestPermissionsResult
lub będziesz musiał ponownie nacisnąć przycisk, aby wywołać funkcję.Więc po prostu zadzwoń z
onRequestPermissionsResult
źródło
Używam RxPermission Biblioteka Biblioteka dla pytając o pozwolenie. Ponieważ jest to długi kod, który musimy napisać, aby poprosić o pozwolenie.
Dodaj te zależności w swoim
build.gradle
źródło
Spróbuj tego
To najprostszy sposób, aby poprosić o pozwolenie w wersji Marshmallow.
Uwaga: - Nie zapomnij dodać tego samego uprawnienia również w pliku manifestu
Drugi kod metody sprawdzania, czy zezwolenie zostało udzielone czy nie?
I zastąp metodę
źródło
Prosty sposób, aby poprosić o pozwolenie, unikając pisania dużej ilości kodu,
https://github.com/sachinvarma/EasyPermission
Jak dodać :
Jak poprosić o pozwolenie:
Mając nadzieję, że będzie to pomocne dla kogoś.
źródło
Przejrzałem wszystkie odpowiedzi, ale nie spełniłem dokładnie mojej potrzebnej odpowiedzi, więc oto przykład, który napisałem i działa doskonale, nawet użytkownik klika pole wyboru Nie pytaj ponownie .
Utwórz metodę, która będzie wywoływana, gdy chcesz poprosić o pozwolenie na uruchomienie, jak
readContacts()
lub możesz również mieć,openCamera()
jak pokazano poniżej:Teraz musimy zrobić
askContactsPermission()
, możesz również nazwać to jakoaskCameraPermission()
lub dowolne pozwolenie, o które poprosisz.Przed napisaniem tej funkcji upewnij się, że zdefiniowałeś poniższą zmienną instancji, jak pokazano:
Teraz ostatni krok, aby zastąpić
onRequestPermissionsResult
metodę, jak pokazano poniżej:Tutaj skończyliśmy z uprawnieniami RunTime, dodatek jest tym,
openPermissionSettingDialog()
który po prostu otwiera ekran Ustawienia, jeśli użytkownik na stałe wyłączył uprawnienia, klikając pole wyboru Nie pytaj ponownie . poniżej jest metoda:Co przegapiliśmy? 1. Zdefiniowanie używanych ciągów w
strings.xml
Inicjalizacja
parentLayout
zmiennej wewnątrzonCreate
metodyparentLayout = findViewById (R.id.content);
Definiowanie wymaganych uprawnień w
AndroidManifest.xml
queryContacts
Sposób, w oparciu o swoje potrzeby lub za zgodą wykonawczego można wywołać metodę, przed którympermission
było potrzebne. w moim przypadku po prostu używam modułu ładującego, aby pobrać kontakt, jak pokazano poniżej:To działa świetnie, szczęśliwe kodowanie :)
źródło
Jeśli używasz AndroidX Activity 1.2.0 lub AndroidX Fragment 1.3.0 :
Istnieją nowe interfejsy API wyników działań, za pomocą których można prosić o uprawnienia:
źródło
źródło
Możesz skorzystać z mojej biblioteki - NoPermission (to tylko jedna klasa)
compile 'ru.alexbykov:nopermission:1.1.1'
Próba
onRequestPermissionResult:
Myślę, że API jest wygodniejsze niż
EasyPermissions
w Google.źródło
Zezwolenie na środowisko wykonawcze AnyWhere In Application Oto przykład
i zadzwoń pod kod w ten sposób:
możesz znaleźć więcej Github
źródło
Uprawnienie w czasie wykonywania tworzy wiele gotowego kodu w działaniu, który jest silnie powiązany. Aby zredukować kod i uprościć sprawę, możesz użyć biblioteki Dexter .
źródło
ZEZWOLENIE NA RUNTIME W ANDROIDZE
Metoda OnClick polega na sprawdzeniu uprawnień do wykonania
a jeśli pozwolenie jest ograniczone, to prosi o pozwolenie
źródło