Declarar permissões do app

Conforme mencionado no fluxo de trabalho para uso de permissões, se o 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 para solicitar uma permissão depende do tipo dela:

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 tem esta linha em AndroidManifest.xml:

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

Declarar hardware como opcional

Algumas permissões, como CAMERA, autorizam que o app acesse partes de hardware que apenas alguns dispositivos Android têm. Se o app declarar uma dessas permissões associadas ao hardware, considere a possibilidade de que o app ainda pode ser executado em um dispositivo que não tenha esse hardware. Na maioria dos casos, o hardware é opcional, então é melhor declará-lo como tal, definindo android:required como false na sua declaração <uses-feature>, conforme mostrado neste snippet de código de um arquivo 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, simplesmente desative 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 com suporte a permissões de execução, ou seja, dispositivos com o Android 6.0 (nível 23 da API) ou versões mais recentes, inclua o elemento <uses-permission-sdk-23> em vez do elemento <uses-permission>.

Ao usar qualquer um desses elementos, você pode definir o atributo maxSdkVersion para indicar que dispositivos com uma versão do Android mais recente que a indicada não precisam de uma permissão específica. Isso permite eliminar permissões desnecessárias e ainda oferecer compatibilidade com dispositivos mais antigos.

Por exemplo, seu app pode mostrar conteúdo de mídia, como fotos ou vídeos, criado pelo usuário durante o uso. Nessa situação, você não precisa usar a permissão READ_EXTERNAL_STORAGE em dispositivos com o Android 10 (nível 29 da API) ou mais recente, desde que o app seja voltado para o Android 10 ou mais recente. No entanto, para suporte a dispositivos mais antigos, é possível declarar a permissão READ_EXTERNAL_STORAGE e definir android:maxSdkVersion como 28.