Déclarer des autorisations d'applications

Comme indiqué dans le workflow d'utilisation des autorisations, si votre application demande des autorisations, vous devez les déclarer dans le fichier manifeste de votre application. Ces déclarations aident les plates-formes de téléchargement d'applications et les utilisateurs à comprendre l'ensemble des autorisations que votre application peut demander.

Le processus de demande d'une autorisation dépend du type d'autorisation :

Ajouter une déclaration au fichier manifeste de l'application

Pour déclarer une autorisation que votre application est susceptible de demander, incluez l'élément <uses-permission> approprié dans le fichier manifeste. Par exemple, une application qui doit accéder à l'appareil photo contient cette ligne dans le fichier AndroidManifest.xml :

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

Déclarer le matériel comme facultatif

Certaines autorisations, comme CAMERA, permettent à votre application d'accéder à des éléments matériels dont disposent seulement quelques appareils Android. Si votre application déclare l'une de ces autorisations associées au matériel, déterminez si elle peut toujours s'exécuter sur un appareil qui ne dispose pas de ce matériel. Dans la plupart des cas, le matériel est facultatif. Il est donc préférable de le déclarer en tant que tel en définissant android:required sur false dans votre déclaration <uses-feature>, comme illustré dans l'extrait de code suivant d'un fichier AndroidManifest.xml :

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

Déterminer la disponibilité du matériel

Si vous déclarez du matériel comme facultatif, il est possible que votre application s'exécute sur un appareil qui ne dispose pas de ce matériel. Pour vérifier si un appareil dispose d'un matériel spécifique, utilisez la méthode hasSystemFeature(), comme indiqué dans l'extrait de code suivant. Si le matériel n'est pas disponible, désactivez cette fonctionnalité dans votre application.

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

Déclarer des autorisations par niveau d'API

Pour déclarer une autorisation uniquement sur les appareils compatibles avec les autorisations d'exécution, c'est-à-dire les appareils équipés d'Android 6.0 (niveau d'API 23) ou version ultérieure, incluez l'élément <uses-permission-sdk-23> au lieu de l'élément <uses-permission>.

Lorsque vous utilisez l'un de ces éléments, vous pouvez définir l'attribut maxSdkVersion pour indiquer que les appareils exécutant une version d'Android supérieure à la valeur spécifiée ne nécessitent aucune autorisation particulière. Cela vous permet d'éliminer les autorisations inutiles, tout en offrant une compatibilité pour les appareils plus anciens.

Par exemple, votre application peut afficher le contenu multimédia, comme des photos ou des vidéos, que l'utilisateur a créé dans votre application. Dans ce cas, il n'est pas nécessaire de demander l'autorisation READ_EXTERNAL_STORAGE sur les appareils équipés d'Android 10 (niveau 29 d'API) ou version ultérieure, à condition que votre application cible Android 10 ou version ultérieure. Toutefois, pour assurer la compatibilité avec les appareils plus anciens, vous pouvez déclarer l'autorisation READ_EXTERNAL_STORAGE et définir android:maxSdkVersion sur 28.