Mises à jour des autorisations sous Android 11

Android 11 permet aux utilisateurs de spécifier des autorisations plus précises pour la position, le micro et la caméra. De plus, le système réinitialise les autorisations des applications inutilisées qui ciblent Android 11 ou une version ultérieure. Les applications peuvent être amenées à mettre à jour les autorisations qu'elles déclarent 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 utilisateur contient une option appelée 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 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 modifié le niveau d'accès de votre application sur Refuser. Si votre application suit les bonnes pratiques pour demander des autorisations au moment de l'exécution, vous ne devriez pas avoir besoin d'apporter de modifications à votre application. En effet, lorsque l'utilisateur interagit avec les fonctionnalités de votre application, vous devez vérifier qu'elles disposent des autorisations dont elles ont besoin.

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 Refuser plusieurs fois pour une autorisation spécifique pendant l'installation de votre application sur un appareil, la boîte de dialogue des autorisations système n'apparaît plus en cas de nouvelle demande de 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 dissuade de demander à plusieurs reprises des 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.

Pendant les tests, vous pouvez réinitialiser ces indicateurs pour vous assurer que les testeurs ne sont pas surpris lorsque la boîte de dialogue de requête ne s'affiche pas. Pour ce faire, utilisez 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 d'application 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 apportées à la fenêtre d'alerte système

Android 11 apporte plusieurs modifications à la façon dont les applications reçoivent l'autorisation SYSTEM_ALERT_WINDOW. Ces modifications visent à protéger les utilisateurs en rendant l'autorisation plus intentionnelle.

Certaines applications reçoivent automatiquement l'autorisation SYSTEM_ALERT_WINDOW sur demande

Certaines classes d'applications reçoivent automatiquement l'autorisation SYSTEM_ALERT_WINDOW sur demande:

  • Toute application disposant de ROLE_CALL_SCREENING et demandant SYSTEM_ALERT_WINDOW se voit automatiquement accorder l'autorisation. Si l'application perd ROLE_CALL_SCREENING, elle perd l'autorisation.

  • Toute application qui capture l'écran via un MediaProjection et qui demande SYSTEM_ALERT_WINDOW se voit automatiquement accorder l'autorisation, sauf si l'utilisateur a explicitement refusé l'autorisation à l'application. Lorsque l'application cesse de capturer l'écran, elle perd l'autorisation. Ce cas d'utilisation est principalement destiné aux applications de streaming de 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 rediriger 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 Paramètres de niveau supérieur, 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 redirigeait l'utilisateur vers un écran spécifique à l'application pour gérer l'autorisation. Cette fonctionnalité n'est plus disponible depuis Android 11. 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 plus intentionnelle.

Numéros de téléphone

Android 11 modifie l'autorisation liée au téléphone que votre application utilise pour lire les numéros de téléphone.

Si votre application cible Android 11 ou une version ultérieure et qu'elle doit accéder aux API de numéro de téléphone indiqué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 afin 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 avec les dernières modifications de confidentialité d'Android 11