Jak wspomniano w przepływie pracy związanym z używaniem uprawnień, jeśli aplikacja prosi o uprawnienia, musisz zadeklarować je w pliku manifestu. Pomagają one magazynom aplikacji i użytkownikom zrozumieć zestaw uprawnień, o które aplikacja może prosić.
Procedura składania prośby o uprawnienia zależy od typu uprawnienia:
- Jeśli uprawnienie to uprawnienie dostępne podczas instalacji, na przykład zwykłe uprawnienie lub uprawnienie do podpisu, jest ono przyznawane automatycznie podczas instalacji.
- Jeśli jest to uprawnienie w czasie działania lub specjalne uprawnienie, a aplikacja jest zainstalowana na urządzeniu z Androidem 6.0 (poziom interfejsu API 23) lub nowszym, musisz samodzielnie poprosić o uprawnienia do działania w środowisku wykonawczym lub specjalne uprawnienia.
Dodaj deklarację do pliku manifestu aplikacji
Aby zadeklarować uprawnienia, o które Twoja aplikacja może prosić, umieść odpowiedni element <uses-permission>
w pliku manifestu. Na przykład aplikacja, która potrzebuje dostępu do aparatu, ma w elemencie AndroidManifest.xml
ten wiersz:
<manifest ...> <uses-permission android:name="android.permission.CAMERA"/> <application ...> ... </application> </manifest>
Deklarowanie sprzętu jako opcjonalnego
Niektóre uprawnienia, np. CAMERA
, umożliwiają aplikacji dostęp do elementów sprzętowych dostępnych tylko na niektórych urządzeniach z Androidem. Jeśli Twoja aplikacja deklaruje jedno z tych uprawnień powiązanych ze sprzętem, zastanów się, czy aplikacja będzie nadal mogła działać na urządzeniu bez takiego sprzętu. W większości przypadków sprzęt jest opcjonalny, dlatego lepiej zadeklarować sprzęt jako opcjonalny, ustawiając android:required
na false
w deklaracji <uses-feature>
, jak pokazano w tym fragmencie kodu z pliku AndroidManifest.xml
:
<manifest ...> <application> ... </application> <uses-feature android:name="android.hardware.camera" android:required="false" /> <manifest>
Określanie dostępności sprzętu
Jeśli zadeklarujesz, że sprzęt jest opcjonalny, aplikacja może działać na urządzeniu, które nie ma takiego sprzętu. Aby sprawdzić, czy urządzenie ma określony sprzęt, użyj metody hasSystemFeature()
, tak jak w tym fragmencie kodu. Jeśli sprzęt nie jest dostępny, wyłącz go w swojej aplikacji.
Kotlin
// Check whether your app is running on a device that has a front-facing camera. if (applicationContext.packageManager.hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
Java
// Check whether your app is running on a device that has a front-facing camera. if (getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA_FRONT)) { // Continue with the part of your app's workflow that requires a // front-facing camera. } else { // Gracefully degrade your app experience. }
Deklarowanie uprawnień według poziomu interfejsu API
Aby zadeklarować uprawnienia tylko na urządzeniach, które obsługują uprawnienia w czasie działania, czyli na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym, zamiast elementu <uses-permission>
użyj elementu <uses-permission-sdk-23>
.
Gdy korzystasz z któregoś z tych elementów, możesz ustawić atrybut maxSdkVersion
, aby wskazać, że urządzenia z Androidem w wersji wyższej niż określona, nie wymagają określonych uprawnień. Dzięki temu można wyeliminować niepotrzebne uprawnienia, a jednocześnie zapewnić zgodność ze starszymi urządzeniami.
Aplikacja może na przykład wyświetlać treści multimedialne, takie jak zdjęcia lub filmy utworzone przez użytkownika w aplikacji. W takim przypadku nie musisz używać uprawnienia READ_EXTERNAL_STORAGE
na urządzeniach z Androidem 10 (poziom interfejsu API 29) lub nowszym, o ile aplikacja jest kierowana na Androida 10 lub nowszego. Aby jednak zapewnić zgodność ze starszymi urządzeniami, możesz zadeklarować uprawnienie READ_EXTERNAL_STORAGE
i ustawić android:maxSdkVersion
na wartość 28.