Mise à jour des autorisations dans Android 11

Android 11 permet aux utilisateurs de spécifier des autorisations plus précises pour la localisation, le micro et l'appareil photo. De plus, le système réinitialise les autorisations des applications inutilisées qui ciblent Android 11 ou version ultérieure. Les applications peuvent avoir besoin de mettre à jour les autorisations déclarées si elles utilisent la fenêtre d'alerte système ou lisent des informations liées aux numéros de téléphone.

Autorisations ponctuelles

À partir d'Android 11, chaque fois que votre application demande une autorisation liée à la localisation, au micro ou à l'appareil photo, la boîte de dialogue des autorisations visibles par l'utilisateur contient une option appelée Only this time (Uniquement cette fois-ci). Si l'utilisateur sélectionne cette option dans la boîte de dialogue, une autorisation ponctuelle temporaire est accordée à votre application.

Découvrez comment le système gère les autorisations ponctuelles.

Réinitialiser automatiquement les autorisations des applications inutilisées

Si votre application cible Android 11 ou une version ultérieure et n'est pas utilisée pendant quelques mois, le système protège les données utilisateur en réinitialisant automatiquement les autorisations d'exécution sensibles que l'utilisateur a accordées à votre application. Cette action a le même effet que si l'utilisateur avait affiché une autorisation dans les paramètres système et défini le niveau d'accès de votre application sur Refuser. Si votre application respecte les bonnes pratiques concernant les demandes d'autorisations au moment de l'exécution, vous n'avez pas besoin de la modifier. En effet, lorsque l'utilisateur interagit avec les fonctionnalités de votre application, vous devez vérifier que celles-ci disposent des autorisations nécessaires.

Découvrez comment le système réinitialise automatiquement les autorisations des applications inutilisées.

Visibilité de la boîte de dialogue d'autorisation

À partir d'Android 11, si l'utilisateur appuie sur Deny (Refuser) pour une autorisation spécifique plusieurs fois pendant l'installation de votre application sur un appareil, il ne verra pas la boîte de dialogue des autorisations système si votre application demande à nouveau cette autorisation. L'action de l'utilisateur implique l'option "Ne plus demander". Dans les versions antérieures, la boîte de dialogue des autorisations système s'affichait chaque fois que l'application demandait une autorisation, sauf si l'utilisateur avait déjà coché une case ou une option "Ne plus demander". Ce changement de comportement dans Android 11 empêche les demandes répétées d'autorisations que les utilisateurs ont choisi de refuser.

Pour déterminer si des autorisations d'application ont été définitivement refusées (à des fins de débogage et de test), utilisez la commande suivante :

adb shell dumpsys package PACKAGE_NAME

PACKAGE_NAME est le nom du package à inspecter.

Le résultat de la commande contient des sections qui se présentent comme suit :

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

Les autorisations qui ont été refusées une fois par l'utilisateur sont signalées par USER_SET. Les autorisations qui ont été définitivement refusées en sélectionnant Refuser à deux reprises sont signalées par USER_FIXED.

Lors des tests, vous pouvez réinitialiser ces indicateurs pour éviter que les testeurs ne soient surpris lorsque la boîte de dialogue de requête ne s'affiche pas. Pour ce faire, exécutez la commande suivante:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME est le nom de l'autorisation que vous souhaitez réinitialiser. Pour afficher la liste complète des autorisations des applications Android, consultez la page de référence des API d'autorisation.

Découvrez comment gérer le refus d'autorisation dans votre application.

Modifications de la fenêtre d'alerte système

Android 11 apporte plusieurs modifications à la manière dont les applications se voient accorder l'autorisation SYSTEM_ALERT_WINDOW. Les modifications sont destinées à protéger les utilisateurs en rendant l'autorisation plus intentionnelle.

L'autorisation SYSTEM_ALERT_WINDOW est automatiquement accordée à certaines applis sur demande

Certaines classes d'applications se voient automatiquement accorder l'autorisation SYSTEM_ALERT_WINDOW sur demande:

  • Toute application qui possède ROLE_CALL_SCREENING et demande SYSTEM_ALERT_WINDOW reçoit automatiquement l'autorisation. Si l'application perd l'autorisation ROLE_CALL_SCREENING, elle perd son autorisation.

  • Toute application qui capture l'écran via un MediaProjection et demande SYSTEM_ALERT_WINDOW obtient automatiquement l'autorisation, sauf si l'utilisateur l'a explicitement refusée. Lorsque l'application arrête de capturer l'écran, elle perd l'autorisation. Ce cas d'utilisation est principalement destiné aux applications de streaming en direct dans des jeux.

Ces applications n'ont pas besoin d'envoyer ACTION_MANAGE_OVERLAY_PERMISSION pour obtenir l'autorisation SYSTEM_ALERT_WINDOW. Elles peuvent simplement demander SYSTEM_ALERT_WINDOW directement.

Les intents MANAGE_OVERLAY_PERMISSION redirigent toujours l'utilisateur vers l'écran des autorisations système

À partir d'Android 11, les intents ACTION_MANAGE_OVERLAY_PERMISSION redirigent toujours l'utilisateur vers l'écran Settings (Paramètres) de premier niveau, où il peut accorder ou révoquer les autorisations SYSTEM_ALERT_WINDOW pour les applications. Toutes les données package: de l'intent sont ignorées.

Dans les versions antérieures d'Android, l'intent ACTION_MANAGE_OVERLAY_PERMISSION pouvait spécifier un package, ce qui amène l'utilisateur à un écran spécifique à l'application pour gérer l'autorisation. Cette fonctionnalité n'est plus compatible à partir d'Android 11. À la place, l'utilisateur doit d'abord sélectionner l'application à laquelle il souhaite accorder ou révoquer l'autorisation. Cette modification vise à protéger les utilisateurs en rendant l'autorisation accordée de manière plus intentionnelle.

Numéros de téléphone

Android 11 modifie l'autorisation liée au téléphone que votre application utilise lors de la lecture des numéros de téléphone.

Si votre application cible Android 11 ou une version ultérieure et doit accéder aux API liées aux numéros de téléphone affichées dans la liste suivante, vous devez demander l'autorisation READ_PHONE_NUMBERS au lieu de l'autorisation READ_PHONE_STATE.

Si votre application déclare READ_PHONE_STATE pour appeler des méthodes autres que celles de la liste précédente, vous pouvez continuer à demander READ_PHONE_STATE dans toutes les versions d'Android. Toutefois, si vous n'utilisez l'autorisation READ_PHONE_STATE que pour les méthodes de la liste précédente, mettez à jour votre fichier manifeste comme suit:

  1. Modifiez votre déclaration de READ_PHONE_STATE pour que votre application n'utilise l'autorisation que sur Android 10 (niveau d'API 29) ou version antérieure.
  2. Ajoutez l'autorisation READ_PHONE_NUMBERS.

L'extrait de déclaration de fichier manifeste suivant illustre ce processus:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

Ressources supplémentaires

Pour en savoir plus sur les modifications apportées aux autorisations dans Android 11, consultez les ressources suivantes:

Vidéos

Développer une application avec les derniers changements concernant la confidentialité dans Android 11