Żądanie uprawnień w Compose
Używaj interfejsów API Accompanist lub activity result
Żądanie uprawnień w Compose to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Żądanie uprawnień w Compose
W Jetpack Compose uprawnienia w czasie działania są żądane za pomocą Activity Result API, opakowanego przez rememberLauncherForActivityResult. Eliminuje to potrzebę używania starego wywołania zwrotnego onRequestPermissionsResult.
Kontrakt RequestPermission
Activity Result API korzysta z kontraktów, które definiują dane wejściowe i wyjściowe. ActivityResultContracts.RequestPermission() przyjmuje ciąg znaków z nazwą uprawnienia i zwraca wynik przyznania w postaci Boolean.
Tworzenie launchera
rememberLauncherForActivityResult tworzy launcher powiązany z kompozycją. Należy przekazać mu kontrakt oraz wywołanie zwrotne otrzymujące wynik.
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// permission granted, use the feature
} else {
// permission denied
}
}Uruchamianie żądania
Należy wywołać launcher.launch z uprawnieniem, o które chcą Państwo poprosić. System wyświetli okno dialogowe, a wywołanie zwrotne zostanie wykonane z wyborem użytkownika.
Button(onClick = {
launcher.launch(Manifest.permission.CAMERA)
}) {
Text("Enable Camera")
}Sprawdź przed żądaniem
Nie należy uruchamiać żądania bez sprawdzenia. Najpierw trzeba sprawdzić, czy uprawnienie zostało już przyznane, i poprosić o nie tylko wtedy, gdy nie zostało przyznane.
val context = LocalContext.current
val alreadyGranted = ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTEDŚledzenie stanu w Compose
Bieżący stan przyznania uprawnienia należy przechowywać w stanie, aby interfejs mógł na niego reagować. Należy go aktualizować wewnątrz wywołania zwrotnego launchera.
var hasCamera by remember {
mutableStateOf(
ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
)
}
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted -> hasCamera = granted }Żądanie wielu uprawnień
Aby jednocześnie poprosić o kilka uprawnień, należy użyć kontraktu RequestMultiplePermissions. Wywołanie zwrotne otrzymuje mapę uprawnień i odpowiadających im stanów przyznania.
val multi = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { results ->
val fineLocation = results[Manifest.permission.ACCESS_FINE_LOCATION] == true
}
multi.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)Sterowanie interfejsem na podstawie stanu
Należy wyświetlać różne treści zależnie od stanu przyznania: jeśli uprawnienie zostało przyznane, wyświetlić funkcję, a w przeciwnym razie przycisk umożliwiający wysłanie żądania. Dzięki temu ekran pozostaje reaktywny i przejrzysty.
if (hasCamera) {
CameraPreview()
} else {
Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
Text("Grant camera access")
}
}Biblioteka Accompanist Permissions
Biblioteka Accompanist Permissions oferuje pomocnicze funkcje wyższego poziomu, takie jak rememberPermissionState. Wiele zespołów woli bezpośrednio korzystać z Activity Result API, aby uniknąć dodatkowej zależności; oba podejścia są prawidłowe.
Nie żądaj uprawnień przy uruchamianiu
Należy unikać wysyłania żądania uprawnień natychmiast po wyświetleniu ekranu. Lepiej poczekać, aż użytkownik wybierze działanie, które wyraźnie ich wymaga. Żądania wysyłane w odpowiednim kontekście uzyskują znacznie wyższy odsetek zgód.
Pamiętaj o zmianach konfiguracji
rememberLauncherForActivityResult zachowuje się podczas rekompozycji, a mechanizm Activity Result prawidłowo dostarcza wyniki także po zmianach konfiguracji, takich jak obrót ekranu. Nie muszą Państwo samodzielnie zarządzać tym mechanizmem.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat żądania uprawnień.
Podsumowanie
Nauczyli się Państwo nowoczesnego sposobu żądania uprawnień:
- Należy używać
rememberLauncherForActivityResultz kontraktemRequestPermission - Najpierw trzeba sprawdzić uprawnienie, a następnie wywołać
launcher.launch(permission) - Należy przechowywać stan przyznania w stanie i na tej podstawie sterować interfejsem
- Do jednoczesnego żądania kilku uprawnień należy używać
RequestMultiplePermissions
Następnie: obsługa odmów i wyświetlanie uzasadnienia.
Ucz się Kotlin dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 36
- Lekcje
- 152
Często zadawane pytania
Czy lekcja „Żądanie uprawnień w Compose” jest bezpłatna?
Tak — pełny tekst „Żądanie uprawnień w Compose” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Żądanie uprawnień w Compose”?
Używaj interfejsów API Accompanist lub activity result Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Żądanie uprawnień w Compose”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Model uprawnień Androida
- Żądanie uprawnień w Compose
- Obsługa odmów i uzasadnianie próśb
- Dobre praktyki ochrony prywatności