Объявить разрешения приложения

Как упоминалось в рабочем процессе использования разрешений , если ваше приложение запрашивает разрешения приложения, вы должны объявить эти разрешения в файле манифеста вашего приложения. Эти объявления помогают магазинам приложений и пользователям понять набор разрешений, которые может запрашивать ваше приложение.

Процесс запроса разрешения зависит от типа разрешения:

Добавить декларацию в манифест приложения

Чтобы объявить разрешение, которое может запросить ваше приложение, включите соответствующий элемент <uses-permission> в файл манифеста вашего приложения. Например, приложение, которому требуется доступ к камере, имеет следующую строку в AndroidManifest.xml :

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

Объявить оборудование как необязательное

Некоторые разрешения, такие как CAMERA , позволяют вашему приложению получать доступ к оборудованию, которое есть только на некоторых устройствах Android. Если ваше приложение декларирует одно из этих разрешений, связанных с оборудованием , подумайте, может ли ваше приложение по-прежнему работать на устройстве, у которого нет этого оборудования. В большинстве случаев оборудование является необязательным, поэтому лучше объявить его необязательным, установив android:required значение false в объявлении <uses-feature> , как показано в следующем фрагменте кода из файла AndroidManifest.xml :

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

Определить доступность оборудования

Если вы объявите оборудование необязательным, ваше приложение может работать на устройстве, не имеющем этого оборудования. Чтобы проверить, имеет ли устройство определенное оборудование, используйте метод hasSystemFeature() , как показано в следующем фрагменте кода. Если оборудование недоступно, корректно отключите эту функцию в своем приложении.

Котлин

// 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.
}

Ява

// 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.
}

Объявить разрешения по уровню API

Чтобы объявить разрешение только на устройствах, поддерживающих разрешения во время выполнения, то есть на устройствах под управлением Android 6.0 (уровень API 23) или выше, включите элемент <uses-permission-sdk-23> вместо элемента <uses-permission> .

При использовании любого из этих элементов вы можете установить атрибут maxSdkVersion , чтобы указать, что устройствам под управлением версии Android выше указанного значения не требуется определенное разрешение. Это позволяет исключить ненужные разрешения, сохраняя при этом совместимость со старыми устройствами.

Например, ваше приложение может отображать мультимедийный контент, например фотографии или видео, созданный пользователем в вашем приложении. В этой ситуации вам не нужно использовать разрешение READ_EXTERNAL_STORAGE на устройствах под управлением Android 10 (уровень API 29) или более поздней версии, если ваше приложение предназначено для Android 10 или более поздней версии. Однако для совместимости со старыми устройствами вы можете объявить разрешение READ_EXTERNAL_STORAGE и установить android:maxSdkVersion значение 28.