Wiem, że Android 6.0 ma nowe uprawnienia i wiem, że mogę je nazwać czymś takim
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Dzisiaj zobaczyłem aplikację Google, która potrzebuje 3 uprawnień: kontakty, sms i aparat. Tworzy stronę 1-3 i woła je wszystkie razem w tym samym czasie, aby aktywować.
Czy ktoś może mi powiedzieć, jak mogę wywołać 4 uprawnienia do aktywacji w tym samym czasie, takie jak sms, kamera, kontakty i pamięć?
Przykład (zapomniałem nazwy aplikacji Google :()
Aplikacja potrzebuje sms-a, kontaktów i aparatu
aplikacja poprosiła mnie (i utworzyła okno dialogowe na stronie 1-3), aby aktywować sms, aktywować kontakty, a następnie kamerę. Więc ta aplikacja Google wywoływała wszystkie 3 wymagane uprawnienia razem, a moje pytanie brzmi: jak mogę to osiągnąć?
Odpowiedzi:
Po prostu uwzględnij wszystkie 4 uprawnienia w
ActivityCompat.requestPermissions(...)
rozmowie, a Android automatycznie połączy je ze sobą, tak jak wspomniałeś.Mam metodę pomocniczą, aby sprawdzić wiele uprawnień i sprawdzić, czy którekolwiek z nich nie zostały przyznane.
Lub w Kotlinie:
Następnie po prostu wyślij wszystkie uprawnienia. Android zapyta tylko o te, których potrzebuje.
źródło
Oto szczegółowy przykład z wieloma prośbami o pozwolenie: -
Aplikacja potrzebuje 2 uprawnień podczas uruchamiania. SEND_SMS i ACCESS_FINE_LOCATION (oba są wymienione w pliku manifest.xml).
Używam Support Library v4, która jest przygotowana do obsługi Androida przed Marshmallow, więc nie ma potrzeby sprawdzania wersji kompilacji.
Gdy tylko aplikacja się uruchomi, prosi o wiele uprawnień jednocześnie. Jeśli oba uprawnienia zostaną przyznane, nastąpi normalny przepływ.
ContextCompat.checkSelfPermission (), ActivityCompat.requestPermissions (), ActivityCompat.shouldShowRequestPermissionRationale () są częścią biblioteki wsparcia.
W przypadku, gdy jedno lub więcej uprawnień nie zostanie przyznanych, ActivityCompat.requestPermissions () zażąda uprawnień, a kontrola przechodzi do metody wywołania zwrotnego onRequestPermissionsResult ().
Należy sprawdzić wartość flagi shouldShowRequestPermissionRationale () w metodzie wywołania zwrotnego onRequestPermissionsResult ().
Istnieją tylko dwa przypadki: -
Przypadek 1: - Za każdym razem, gdy użytkownik kliknie Odmów uprawnień (w tym za pierwszym razem), zwróci wartość „prawda”. Więc kiedy użytkownik zaprzeczy, możemy pokazać więcej wyjaśnień i pytać ponownie
Przypadek 2: -Tylko jeśli użytkownik wybierze „nigdy więcej nie pyta”, zwróci to fałsz. W takim przypadku możemy kontynuować z ograniczoną funkcjonalnością i poprowadzić użytkownika do aktywacji uprawnień z ustawień dla większej liczby funkcji lub możemy zakończyć konfigurację, jeśli uprawnienia są trywialne dla aplikacji.
PRZYPADEK 1
PRZYPADEK-2
źródło
Mały kod:
Lista uprawnień Androida Normalne uprawnienia i niebezpieczne uprawnienia w API 23
źródło
}
źródło
To proste, zrób w ten sposób
W Twoim onCreate
Następnie sprawdź wynik
źródło
Moje podejście opiera się na odpowiedzi Nicka i mam nadzieję, że jest nieco bardziej użyteczne w przypadku wielu (tyle, ile potrzeba, a nie tylko dwóch) uprawnień. Sugeruje dodanie klasy PermissionsHelper z jedną odpowiedzialnością:
}
Jeśli jedno lub kilka wymaganych uprawnień nie zostało udzielonych przez użytkownika, zostanie mu wyświetlony szczegółowy komunikat AlertDialog.
Przykład użycia w ćwiczeniu:
Mam nadzieję, że komuś się to przyda.
źródło
Moja klasa obsługi do żądania wielu uprawnień. Możesz sprawdzić pełne użycie tutaj
źródło
Chodzi o następującą metodologię
Utwórz klasę „statyczną” dla metod uprawnień
W MainActivity.java
źródło
Skorzystaj z tego linku, aby w pełni zrozumieć wiele uprawnień, a także pobrać pełny kod źródłowy, kliknij tutaj
źródło
Sprawdzam każdą sytuację
if denied - wyświetlanie okna dialogowego Alert dla użytkownika, dlaczego potrzebujemy pozwolenia
Sprawdzanie wyników uprawnień
źródło
Nie ma nic złego w odpowiedziach proszących o wielokrotne uprawnienia, ale kod wyniku wielokrotnego pozwolenia nie jest zaimplementowany bardzo elegancko i może powodować sprawdzenie błędnego wyniku uprawnień.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
to okropna logika sprawdzania wyniku wielu uprawnień, nie wiem, dlaczego Google zaimplementował tak okropny kod.To bałagan, zwłaszcza gdy sprawdzasz wiele uprawnień. Powiedzmy poprosić o
CAMERA
,ACCESS_FINE_LOCATION
iACCESS_NETWORK_STATE
.Musisz sprawdzić,
ACCESS_FINE_LOCATION
ale użytkownik jest przyznawany tylkoCAMERA
przy pierwszym uruchomieniu i sprawdzasz,grantResults[1]
ale w drugim przebieguACCESS_FINE_LOCATION
staje się uprawnieniem z indeksem 0. Mam tak wiele problemów z tym, że użytkownik nie przyznaje wszystkich uprawnień naraz i muszę pisać tak bezcelową logikę wyników uprawnień.Powinieneś albo użyć
Albo prostszy
w
onPermissionRequestResult
metodzie.źródło
Po obejrzeniu wszystkich długich i złożonych odpowiedzi. Chcę opublikować tę odpowiedź.
RxPermission jest obecnie powszechnie używaną biblioteką do pytania o pozwolenie w jednym wierszu kodu.
dodaj swoje
build.gradle
Czy to nie jest łatwe?
źródło
Z powodzeniem wdrożyłem prosty kod dla wielu uprawnień jednocześnie. Wykonaj poniższe kroki 1: Utwórz klasę Utility.java jak poniżej
2: Teraz zadzwoń
w Twojej Aktywności onCreate () lub zgodnie z Twoją logiką.
3: Teraz sprawdź uprawnienia przed wykonaniem operacji dla określonego zadania
4: Teraz zaimplementuj metodę onRequestPermissionsResult () w swoim działaniu, jak poniżej
źródło
Krótkie i słodkie :). w co wierzę.
źródło
źródło
Możesz użyć Dextera
Dodatkowo
build.gradle
:I używaj go w swojej działalności jako:
źródło
Okazało się, że jest to przykład uprawnień środowiska wykonawczego z github Google.
źródło
Sprawdź sekcję „Jednoczesne żądanie wielu uprawnień” w tym artykule:
Rzeczy, które musisz wiedzieć o uprawnieniach Androida M.
Jest bardzo dobrze wyjaśniony i może również dotyczyć innych powiązanych tematów, o których nie myślisz.
źródło
Użyj pomocnika w ten sposób (nazwy uprawnień nie mają znaczenia).
}
źródło
Prosty sposób na zadawanie wielu pozwoleń,
https://github.com/sachinvarma/EasyPermission
Jak dodać :
Jak poprosić o pozwolenie:
Więcej szczegółów ->
https://github.com/sachinvarma/EasyPermission/blob/master/app/src/main/java/com/sachinvarma/easypermissionsample/MainActivity.java
Może to pomóc komuś w przyszłości.
źródło
W Kotlinie:
źródło
To właśnie robiłem w swojej działalności. Nadzieja będzie pomocna. Proszę o uprawnienia do kamery i mikrofonu.
źródło