Declarar permissões do app

Conforme mencionado no fluxo de trabalho para uso de permissões, se seu app solicitar permissões, declare-as no arquivo de manifesto do app. Essas declarações ajudam as app stores e os usuários a entender o conjunto de permissões que seu app pode solicitar.

O processo de execução de uma solicitação de permissão depende do tipo:

Adicionar declaração ao manifesto do app

Para declarar uma permissão que seu app pode solicitar, inclua o elemento <uses-permission> adequado no arquivo de manifesto do app. Por exemplo, um app que precisa acessar a câmera teria a seguinte linha no manifesto:

AndroidManifest.xml

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

Declarar hardware como opcional

Algumas permissões, como CAMERA, permitem que seu app acesse hardware específico presente em apenas alguns dispositivos Android. Se o app declarar uma dessas permissões associadas a hardware, considere a possibilidade de que seu app não seja executado em um dispositivo que não tenha esse hardware. Na maioria dos casos, o hardware é opcional, então é melhor declarar o hardware como opcional definindo android:required como false na sua declaração <uses-feature>, conforme mostrado neste snippet de código:

AndroidManifest.xml

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

Determinar a disponibilidade de hardware

Caso você declare o hardware como opcional, é possível que seu app seja executado em um dispositivo que não tenha esse hardware. Para verificar se um dispositivo tem um hardware específico, use o método hasSystemFeature(), conforme mostrado no snippet de código a seguir. Se o hardware não estiver disponível, desative normalmente esse recurso no app.

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

Declarar permissões por nível de API

Para declarar uma permissão apenas em dispositivos compatíveis com permissões de execução, ou seja, dispositivos com Android 6.0 (API de nível 23) ou versões mais recentes, inclua o elemento uses-permission-sdk-23 em vez do elemento uses-permission.

Ao usar um desses elementos, você poderá definir o atributo maxSdkVersion. Esse atributo indica que dispositivos que executam uma versão mais recente do que a maxSdkVersion não precisam de uma permissão específica.