Blog technique sur mes expériences de développeur.
23 avril 2016
Dans les chapitres précédents, nous avons vu tout le processus permettant de demander une autorisation de permission à un utilisateur tout en gérant les différents cas. Imaginez maintenant que dans un écran vous ayez besoin de plusieurs permissions dites dangereuses, par exemple :
Il ne faudra pas répéter tout le code des chapitres précédents pour chacune des permissions. En effet, nous allons voir qu’il est possible de demander plusieurs permissions d’un coup.
L’intégralité de ce cours est disponible dans le CourseLab OpenClassrooms !
requestPermissions
Souvenez-vous, dans le chapitre précédent, nous avons vu que pour demander une permission, il convenait d’utiliser la méthode requestPermissions
de la classe Fragment
. Pour rappel, cette méthode accepte deux paramètres :
Je suis sûr que vous avez déjà compris. ;)
Dans le chapitre précédent, voici l’appel que nous avions fait :
requestPermissions(new String[] { permission.CALL_PHONE }, 2);
Le premier paramètre était bien un tableau, mais celui-ci ne contenait qu’une seule permission. Pour demander plusieurs permissions d’un coup, il conviendra donc d’alimenter ce tableau avec plusieurs éléments.
Illustrons l’appel de la méthode avec un exemple. Dans l’introduction de ce chapitre, je parlais d’une application permettant d’accéder aux contacts et de les appeler. Il convient donc d’accéder aux deux permissions dangereuses suivantes :
CALL_PHONE
: pour passer un appel ;READ_CONTACTS
: pour lire les contacts.Voici alors comment il conviendrait alors d’appeler la méthode requestPermissions
:
requestPermissions(new String[] { permission.CALL_PHONE, permission.READ_CONTACTS }, 2);
Ce qui graphiquement se traduira par les pop-up suivantes :
Comme vous pouvez le constater, dès la première pop-up système, l’utilisateur sait combien de permissions lui seront demandés.
Comme vous avez pu le constater dans les captures d’écran ci-dessus, pour chacune des permissions, deux choix s’offre à l’utilisateur :
Il convient donc de récupérer la réponse de l’utilisateur et vérifier que chacune des permissions a été acceptée ou non afin de pouvoir. Comme pour une demande d’une unique permission, la récupération de la réponse de l’utilisateur doit se faire au sein de la méthode onRequestPermissionsResult
qui, pour rappel, est une méthode de la classe Fragment
:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Souvenez-vous, cette méthode prend 3 paramètres :
requestCode
: il s’agit du code unique permettant d’identifier la demande de permissions ;permissions
: il s’agit des permissions qui ont fait l’objet d’une demande ;grandResults
: il s’agit du résultat de notre demande de permission.Les deux derniers paramètres sont des… tableaux ! Ce qui signifie que chacune des cases contiendra une permission et son statut (acceptée ou refusée).
Dans le cas de notre appel précédent, le tableau permission ressemblera à ça :
case | contenu |
---|---|
0 | permission.CALL_PHONE |
1 | permission.READ_CONTACTS |
Il conviendra donc ensuite de gérer correctement le traitement de vos permissions sachant qu’une seule peut avoir été acceptée, ou les deux refusées, etc.
Il convient également de gérer correctement les affichages des messages justifiants les permissions, etc ;)