Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

Android 6 : Les nouveautés

Demander explicitement la permission à l'utilisateur

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Apprenez à utiliser l'API de demande de permissions sous Android 6 et à gérer l'obtention de résultats.
08:11

Transcription

Maintenant que nous savons qu'il est nécessaire de demander à notre utilisateur la permission avant d'effectuer un appel Nous allons voir comment le réaliser avec les API d'Android 6. Pour y arriver nous allons utiliser la fonction onClick qui est reliée au bouton rose, le FloatingActionButton, qui est en bas à droite et qui quoi qu'il arrive effectue un appel. C'est ce qui nous pose problème puisque sur Android 6, il faut d'abord vérifier qu'on a les droits. Si on ne les a pas, les demander avant de faire un appel téléphonique, puisque la fonction callForInfo va justement effectuer l'appel. C'est ce qu'on avait vu dans la vidéo précédente. Cette fonction, il me l'a entourée de jaune. Pourquoi ? Tout simplement car je n'ai pas vérifié que cet objet n'est pas nul, avant de m'en servir puisqu'en faisant le findViewById, iI y a une possibilité qu'il ne trouve pas l'objet en question. Et donc, il me prévient qu'il y a un risque si je l' utilise sans vérifier qu'il n'est pas nul. On peut par exemple, soit faire un Assert si on est sûr de nous, soit entourer avec un if, si j'ai bien trouvé mon bouton. Alors j'ajoute un OnClickListener car s'il ne le trouve pas notre application va se planter. Moi ce qui m'intéresse le plus, c'est la partie antérieure à la fonction onClick qui va nous permettre de vérifier tout d'abord, quel est le statut de nos permissions. Est-ce qu'on a la permission ? Est-ce qu'on ne l'a pas ? Si on ne l'a pas, qu'est-ce qu'on va pouvoir faire ? Alors pour vérifier qu'on a la permission, il existe des fonctions intégrées au SDK. La classe à utiliser s'appelle ActivityCompat, qui fait partie de la librairie de support, c'est pour ça que ça s'appelle Compat. C'est une classe avec des méthodes statiques qu'on va pouvoir utiliser, notamment la fonction checkSelfPermission. Donc, on va vérifier qu'on a bien des permissions et si on ne les a pas, on va faire les actions nécessaires. Cette fonction reçoit en paramètre le contexte donc ça va être l'activité dans laquelle on est ainsi que, le nom de la permission. Le contexte ça va être MainActivity.this. Pourquoi je précise MainActivity.this et non pas uniquement .this ? Car je ne sais pas si vous avez fait attention mais on a créé une classe anonyme ici, en faisant new View.OnClickListener. C'est une classe sans nom qui respecte le protocole onClickListener Le .this, ça pourrait vouloir dire cet objet, qu'on vient de créer ou alors l'objet qui représente le MainActivity. Donc pour préciser ce qu'on veut dire on marque MainActivity.this. Ensuite, le nom de la permission alors pour les permissions, vous allez pouvoir utiliser des constantes. Vous avez dans l'objet Manifest.permission., et là, vous avez les différentes permissions que l'on peut utiliser. Nous, celle qui nous intéresse c'est CALL_PHONE. Cette fonction checkSelfPermission, ça ne retourne pas un boulet, ça retourne la permission actuelle qu'on a pour cette permission-là. Si ce que j'ai reçu, c'est différent de PackageManage. PERMISSION_GRANTED, donc si je n'ai pas l'autorisation, ça peut vouloir dire deux choses soit je ne l'ai jamais demandée, soit je l'ai demandée mais je ne l'ai pas eu, la personne a refusé. Dans tous les cas si la permission que j'ai, ce n'est pas celle qui dit que j'ai eu l'autorisation explicite Alors, je vais devoir vérifier. Si, la personne ne m'a pas donné l'autorisation il me suffit de la demander activityCompat.requestPermissions qui reçoit en paramètre encore une fois le contexte, donc MainActivity.this. Ensuite, la liste des permissions que l'on souhaite demander. On peut en demander plusieurs. Nous, on n'en veut qu'une mais il faut le passer au format d'une liste et je vais donc remettre la même permission que celle que l'on vient de vérifier. La dernière chose demandée est un identifiant donc, requestCode qui nous permettra au format entier d'identifier cette requête c'est à dire la demande qu'on est en train de faire. Pourquoi a-t-on besoin de ce requestCode ? Tout simplement puisque ça va être un appel asynchrone, on va dire au système, qu'on a besoin de cette permission. Le sytème quand il aura le temps va afficher une pop-up. Cette pop-up, l'utilisateur va prendre du temps avant d'appuyer sur un des boutons. Lorsqu'il aura appuyer sur le bouton, il nous donnera le résultat. On ne peut pas bloquer notre application pendant ce temps-là. Donc l'application va continuer. Il ne faudra pas qu'on fasse d'appel puisqu'on a pas encore la permission juste après l'exécution de cette ligne Et quand, le résultat de cette demande va revenir, ce sera le système qui va appeler une fonction avec le résultat. Il va falloir mettre un entier ici, qui nous servira dans l'obtention d'un résultat, à vérifier que c'est bien cette requête dont on a le résultat. On va créer une constante pour l'occasion, on va l'appeler MY_PERMISSION _R-EQUEST_CALL_PHONE. Je vais faire alt Enter pour créer une constante. dans la classe MainActivity C'est un entier que je veux et je vais mettre le chiffre 1 à l'intérieur. Peut importe l'entier que vous mettez c'est le nom qui va être important. Une fois que j'ai fait ça, je vais faire un else et dire que je ne veux effectuer l'appel que si j'ai la permission qui a été GRANTED Donc que j'ai la permission. Si je ne l'ai pas, je fais la demande mais je ne fais pas d'appel car sinon cela va planter puisque je n'ai pas encore la permission. Une fois que j'ai demandé cette permission, je vais vérifier le résultat que j'obtiendrai quand l'utilisateur aura choisi d'accepter ou de refuser cette permission. On va donc ajouter une nouvelle méthode qui est une méthode spécifique. On va redéfinir [inaudible] Donc je vais faire command+N Android Studio et choisir la méthode onRequestPermissionResult. Je commence à taper onRequest et automatiquement il me la présélectionne, elle est ici, c'est ça qui m'intéresse. Alors cette méthode, elle reçoit trois paramètres. Le requestCode, c'est le système, après avoir obtenu le résultat de l'utilsateur qui va nous dire qu'il vient d'avoir un résultat pour ce requestCode. C'est important d'avoir mis un nombre pour pouvoir retrouver de quel résultat on parle puisqu'on pourrait éventuellement dans la même activité avoir plusieurs demandes de permission. Elles arriveraient ici, donc c'est grâce au requestCode qu'on va pouvoir savoir de quelle permission on est en train de parler. Ensuite, la liste des noms de permission dont on a les résultats. Et enfin, la liste des résultats de permission. Est-ce que ça a été accepté ou refuser par l'utilisateur ? Je vais enlever l'appel à super qui ne m'intéresse pas dans ce contexte-là et je vais utiliser un switch, préparé pour plus tard sur requestCode. On peut supposer que j'aurai d'autres demandes à faire par la suite avec ce requestCode. Peut-être que je demanderai pour prendre une photo, utiliser le GPS ou peut-être dans la même activité. Donc je vais faire un switch dès maintenant. Là, je m'occupe uniquement de MY_PERMISSION_REQUEST_CALL_PHONE, c'est celle, que j'ai demandée avant. Si j'arrive ici, ça veut dire que j'ai un résultat pour la requête que j'ai faite plus tôt. Il me suffit de vérifier ce résultat maintenant. Si le résultat que j'ai est le résultat autorisé, je vais effectuer mon appel. Sinon, je ne vais pas effectuer mon appel. Donc si j'ai bien des résultats, grantResults.length 0 et grantResults [0] car je n'ai fait qu'une demande. Rappelez-vous toute à l'heure, on avait un tableau avec une seule demande. Donc je sais que le résultat que j'ai pour cette requête-là, ce sera à la case zéro qu'il va arriver, = PackageManager.PERMISSION_GRANTED. Si c'est le résultat que j'ai, c'est que la permission a été acceptée. Alors, je pourrais faire mon appel et là on peut mettre callForInfo. On peut aussi mettre par exemple, un petit message d'avertissement pour l'utilisateur et pour qu'on voit ce qui se passe, je vais utiliser les toast pour afficher un message à l'utilisateur autorisation accordée. Et ici, on va faire pareil Toast, autorisation refusée. Voilà, notre application a maintenant été modifiée pour tenir compte de cette demande d'autorisation. Dans la prochaine vidéo, nous verrons comment ça se passe pour l'utilisateur et vérifier que tout est fonctionnel.

Android 6 : Les nouveautés

Prenez en main les améliorations apportées à Android 6. Voyez l’introduction d’un système d'autorisations pour les applications, la sauvegarde automatique des données, etc.

1h04 (14 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Android Android 6
Spécial abonnés
Date de parution :13 sept. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !