Android M apporte de nombreuses nouveautés, mais une de ses nouveautés majeures concernent le système de permission. Explication des nouveautés sur les permissions à l'exécution.
Un appareil Android peut faire beaucoup de choses comme prendre des photos, avoir un itinéraire ou faire des appels téléphoniques. Avec toutes ses fonctionnalités viennent une grande quantité de données utilisateurs sensibles comme les contacts, rendez-vous, localisation, ... Ses informations sensibles
sont protégés par des permissions que les applications doivent avoir pour accéder à ses données. Android 6.0 introduit la plus grosse nouveauté sur le modèle de permission avec l'ajout de permission à la voler qui remplace le système de permission à l'installation quand l'application cible l'API 23 et tourne sur un appareil sous Android 6.0.
Les permissions à l'exécution donne la possibilité de contrôler quand et avec quel contexte vont être demandé les permissions. L'utilisateur n'aura plus à accepter une liste de permission à l'installation de l'application. L'avantage est que la mise à jour de l'application ne sera pas bloqué si des permissions ont été ajoutées à l'application.
Un guide sur les permissions a été mis en place pour guider le développeur sur la demande de permission, l'explication des permissions et comment gérer si la permission a été refusée.
Dans beaucoup de cas, les permissions peuvent être évitées en utilisant le système d'intent existant pour utiliser d'autre application existante spécialisé au lieu de construire une expérience complète sur son application. Par exemple, en utilisant ACTION_IMAGE_CAPTURE pour démarrer une application appareil photo existante auquel l'utilisateur est familier plutôt que construire sa propre expérience d'appareil photo. Un comparatif entre intent et permission : https://developer.android.com/preview/features/runtime-permissions.html#perms-vs-intents
Si une permission à l'exécution est nécessaire, il y a de nombreux outils pour aider. Vérifier si une permission est possible avec ContextCompat.checkSelfPermission() qui est disponible dans la libraire de support et la demande de permission est possible avec requestPermissions() qui affiche une fenêtre de demande de permission si elle n'a pas été acceptée. La permission doit être contrôlée à chaque fois que nécessaire, car l'utilisateur peut annuler une permission à n'importe quel moment.
La fonction shouldShowRequestPermissionRationale() return true si l'utilisateur à refuser la permission au moins une fois mais n'a pas coché 'ne plus demandé'.
Des guides existent pour implémenter au mieux ce système de permission pour rendre compatible son application à Android 6 : guide design et guide developer.