Mise à jour des autorisations dans Android 11

Android 11 permet aux utilisateurs de spécifier des autorisations plus précises pour la position, le micro et l'appareil photo. En outre, le système réinitialise les autorisations des applications inutilisées qui ciblent Android 11 ou version ultérieure, et les applications peuvent avoir besoin de 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 position, au micro ou à l'appareil photo, la boîte de dialogue des autorisations visibles par l'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 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 suit les bonnes pratiques pour demander des 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 dont ils 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 plusieurs fois sur Refuser pour une autorisation spécifique pendant l'installation de votre application sur un appareil, la boîte de dialogue des autorisations système ne s'affiche pas 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 décourage 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 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 de la fenêtre d'alerte système

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

Certaines applis se voient automatiquement accorder l'autorisation SYSTEM_ALERT_WINDOW 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 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 demande SYSTEM_ALERT_WINDOW se voit automatiquement accorder l'autorisation, sauf si l'utilisateur l'a explicitement refusée. Lorsque l'application cesse de capturer l'écran, elle perd l'autorisation. Ce cas d'utilisation est principalement destiné aux applications de streaming en direct 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 affichent toujours l'écran des autorisations système pour l'utilisateur

À partir d'Android 11, les intents ACTION_MANAGE_OVERLAY_PERMISSION redirigent toujours l'utilisateur vers l'écran 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 redirigeait l'utilisateur vers un écran spécifique à l'application pour gérer l'autorisation. Cette fonctionnalité n'est plus compatible à partir d'Android 11. L'utilisateur doit d'abord sélectionner l'application pour laquelle il souhaite accorder ou révoquer l'autorisation. Cette modification vise à protéger les utilisateurs en rendant l'octroi de l'autorisation plus intentionnel.

Numéros de téléphone

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

Si votre application cible Android 11 ou une version ultérieure et doit accéder aux API de numéro 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 sur 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 derniers changements concernant la confidentialité sur Android 11