Les permissions à partir de Android 11
Les permissions.

Retour sélection autres tests

Avec Android 11 , il y a une nouvelle façon de demander des autorisations dans une application.

En effet la nouvelle API Register Activity for Result est appelée à remplacer startActivityForResult.

La demander des autorisations devient un composant plus maintenable, évolutif et facile à mettre en œuvre. De plus les permissions peuvent être proposées directement à partir de l'application. L'utilisateur n'a plus à régler les permissions nécessaires à partir de l'application Paramètres (settings) de l'appareil.

Dans l’exemple d’application, nous allons demander les permissions juste au moment où nous cliquons sur l’icône de la caméra (comme c’est la suggestion actuelle, ne demandant les permissions juste quand effectivement sont nécessaires), donc nous devons ajouter l’utilisation de celui-ci à l’AndroidManifest.xml. <uses-permission android:name="android.permission.CAMERA" /> Maintenant, en utilisant Register Activity for Result API (registerForActivityResult()), nous pouvons avoir un objet qui nous permet de le lancer chaque fois que nous demandons l’autorisation et que nous passons en paramètre le bon contrat pour le demander (ActivityResultContracts.RequestPermission()) et le callback du paramètre suivant reste une lambda booléenne qui indique si oui ou non il a été accordé. Ici, nous mettrions la logique de ce qu’il faut faire lorsque la permission est accordée ou non, y compris le scénario lorsque l’utilisateur la nie la première fois (shouldShowRequestPermissionRationale) avec l’idée d’expliquer correctement ce qui se passe si elle n’est pas accordée (pour les versions antérieures à Android 11, il montrerait la boîte Don’t ask again) : private val cameraPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> with(binding.root) { when { granted -> snackBar("Permission granted!") shouldShowRequestPermissionRationale(Manifest.permission.CAMERA) -> { //this option is available starting in API 23 snackBar("Permission denied, show more info!") } else -> snackBar("Permission denied") } } } Enfin, pour lancer l’autorisation sous une certaine action (comme suggéré), puis quand nous cliquons sur le bouton de la caméra, nous appelons l’objet d’autorisation nouvellement créé, et avec la méthode *launch* nous passons l’autorisation que nous voulons demander et c’est fait : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) binding.cameraIcon.setOnClickListener { cameraPermission.launch(Manifest.permission.CAMERA) } } … et c’est tout! nous n’avons besoin de rien d’autre. Ainsi, nous pourrions remplacer ou inclure des groupes d’autorisation tels que l’emplacement ou la lecture / écriture du stockage. Rappelez-vous que pour Android 11, il vous montrera les options de demande unique ou activer uniquement lorsque l’application est utilisée, pour les versions précédentes, les options classiques seront toujours disponibles : A new scenario can happen: when the permission is definitively denied, it’s possible that it can really be required it. Then it is suggested that to take the user to the device Settings screen so that from there they can reconfigure the permissions directly. To do this, just create an Intent with the required screen (Default settings) and start a new activity: Utiliser l'autorisation d'accès à tous les fichiers (MANAGE_EXTERNAL_STORAGE) Google Play limite l'utilisation des autorisations sensibles ou à haut risque, y compris une autorisation spéciale appelée Accès à tous les fichiers. Elle s'applique uniquement aux applications qui ciblent Android 11 (API niveau 30) et déclarent l'autorisation MANAGE_EXTERNAL_STORAGE, ajoutée sur Android 11. Par ailleurs, cette règle n'a pas d'incidence sur l'utilisation de l'autorisation READ_EXTERNAL_STORAGE. Si votre application n'a pas besoin de l'autorisation MANAGE_EXTERNAL_STORAGE, vous devez supprimer cette autorisation du fichier manifeste de votre application afin de pouvoir la publier. Vous trouverez ci-après des informations détaillées sur d'autres implémentations qui respectent le règlement. Si votre application respecte les utilisations autorisées dans le règlement ou qu'elle peut faire l'objet d'une exception, vous devez déclarer cette autorisation et toute autre autorisation à haut risque dans le formulaire de déclaration de la Play Console. Les applications qui ne respectent pas le règlement ou pour lesquelles vous n'envoyez pas de formulaire de déclaration pourront être supprimées de Google Play. Quand devez-vous demander l'autorisation d'accès à tous les fichiers ? Vous ne devez utiliser l'autorisation d'accès à tous les fichiers que lorsque votre application ne peut pas respecter les bonnes pratiques plus respectueuses de la confidentialité, telles que l'utilisation de Storage Access Framework ou de l'API MediaStore. En outre, la façon dont l'application utilise l'autorisation doit faire partie des utilisations autorisées et doit être directement liée à sa fonctionnalité de base. La fonctionnalité de base correspond à l'objectif principal de l'application. Sans celle-ci, l'application est défectueuse ou inutilisable. La fonctionnalité de base, ainsi que toutes les fonctionnalités essentielles qui la composent, doivent toutes être documentées et mises en avant de façon visible dans la description de l'application.
Voir le code java