Deklarowanie uprawnień aplikacji

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:

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.