Prendre des photos

Durée estimée: 45 minutes

Présentation

43-appinventorPaint/3-version2Paint/assets/img/blocsCamera.PNG

La deuxième version de l'application va permettre de prendre des photos en utilisant un bloc de la catégorie des media.

Ce que vous allez voir ou apprendre

App Inventor ne dispose pas lui même du logiciel pour prendre des photos, mais il y a sur votre smartphone, des applications qui savent le faire. Votre application va leur lancer un appel, puis leur déléguer la prise de photo sur un principe de partenariat entre applications de votre smartphone.

Ce principe de partenariat permet à chaque application de faire appel aux autres applications, pour un service donné (prendre une photo, diffuser un message, etc.). Il fait de votre smartphone un système copératif très puissant car chaque application peut déléguer à d'autres, la réalisation d'une opération.

Par contre, cette opération peut prendre un temps indéterminé. L'application appelante (ou cliente) pourrrait donc restée bloquée à attendre la réponse, ... ce qui est ennuyeux en l'absence de délai garanti.

Donc elle ne va pas attendre ...la notion de procédure "asynchrone" où on sépare la demande de la réponse.

De façon habituelle, après un appel de procédure (synchrone) le programme attend la réponse avant de continuer. Ce n'est plus le cas dans une porcédure asynchrone : l'appel est envoyé et le programme continue sans attendre la réponse. L'arrivée de la réponse déclenche un évènement auquel le programme doit réagir dans un nouveau script.

Ce que vous allez faire

Vous allez réaliser cette version en plusieurs étapes :

  1. Prendre la photo et remplacer l'image de fond avec cette photo,
  2. Gérer les autorisations de vos applications
  3. Paramétrer les prises de vue pour incruster la date et la géolocalisation
  4. Choisir et modifier l'application qui prend en charge un appel de service

Etape 1: Prendre une photo

Pour commencer vous allez prendre une photo et remplacer l'image de fond du cadre.

Dans la partie "Design"

  • ajoutez un bouton qui permettra de déclencher la prise de vue,
  • ajoutez un composant Caméra qui apparait en dessous de l'écran avec les composants "invisibles".

Dans la partie "Blocs" ou programme :

La prise de vue se fait en deux étapes :

  • la première consiste à appeler la procédure de prise de photo, quand on clique sur le bouton,
  • la seconde correspond à la réception par App Inventor de la photo renvoyée qui déclenche l'évènement "Camera.AprèsPrisePhoto "avec l'image en paramètre.

Ce déroulement en deux temps correspond est appelé "Asynchrone". Dans ce mode, après avoir appelé la procédure qui prend la photo, le script n'attend pas pour continuer. La procédure appelée ne renvoie pas immédiatement le résultat demandé comme ce serait le cas dans un mode "synchrone". En mode asynchrone, l'exécution des blocs qui suivent cet appel n'est pas bloqué. La photo sera traitée dans un script différent, quand elle arrivera avec l'évènement "Camera.AprèsPrisePhoto ".

Etape 2: Gérer les autorisations de votre application

Vous avez vu, au moment de la première l'installation ou de la prmeière utilisation de votre application que le système Android vous demande si vous autorisez l'application à utiliser certaines ressources de votre smartphone. Ca peut suffire, mais pas toujours.

Dans certains cas, et en particulier lorsqu'une application est lancée par une autre, c'est à l'utlisateur su smartphone de donner maanuellement certaines autorisations. S'il ne le fait pas l'application signale une erreur.

Ici, c'est le cas de l'application qui prend les photos et qui doit disposer des droits nécessaires pour enregistrer ces photos dans la mémoire permanente du smartphone. La vidéo qui suit illustre l'erreur qui apparaitsi vous n'avez ps donné les droits et vous montre comment les donner

Etape 3: Régler les paramètres de prise de vue (format, date, géolocalisation)

Nous voulons faire de cette appdlication une application de reportage dans laquelle les photos doivent être datées et géolocalisées. Il y a plusieurs manières de le faire, mais pour réduire les contestations possibles, nous allons le faire en incrustant la date et la localisation dans l'image au moment de la prise de vue. Cette tache est donc déléguée à l'appareil photo qui doit être capable de le faire. C'est pour cette raison que nous avons choissi l'application opne Camera. Les autres ne le permettent pas forcément.

Dans la vidéo qui suit, nous alons donc voir commen paramétrer l'appareil photo pour qu'il enregsitre dans l'image la date et la localisation. Vous pourrez aussi introduire un commentaire ou une signature si vous le souhaitez.

Remarque : dans la suite du cours, nous verrons également comment gérer la géolocalisation dans les programmes App Inventor et avec des cartes. Ici, nous nous lmitons à utiliser les possibilités de l'application photo.

Etape 4: Choisir et modifier les applications par défaut

La première fois qu'une application fait un appel de service (pour prendre une photo, diffuser un message, ...) Android propose la liste des applications installées qui ont la capacité à répondre à la demande (s'il y en a une seule elle est lancée directement).

L'utilisateur peut alors sélectionner l'application à qui sera confiée la tache, et Android va demander si ce choix est effectué pour "une seule fois" ou "toujours"
  • si l'utlisateur répond "une seule fois", le choix de l'application lui sera soumis à nouveau la fois suivante,
  • si l'utilisateur répond "toujours" l'application choisie sera ensuite utilisée sans poser à nouveau la question à l'utilisateur. C'est plus pratique.
Le problème est de savoir comment faire si on change d'avis et que l'on préféère utiliser un nouvel appareil photo ou une nouvelle application pour diffuser des messages ... On le fait en modifiant les paramètres de l'application retenue.

La manière de le faire est présentée dans la vidéo qui suit.

Auto-contrôle

Pour votre Portfolio

Dans le portfolio, allez à la page 3.02 nommmée : Appli peinture, puis donnez une réponse courte aux questions duivantes :

  1. Expliquez la signification des instructions montrées ici en pseudocode ou avec App Inventor. Supposons par exemple que la variable X vaut 10 avant l'exécution de l'instruction. Quelle sera sa valeur après exécution de l'instrcution.
    Mettre X à X + 1
  2. Une des caractéristiques de l'abstraction est d'aider à réduire les détails pour se concentrer sur ce qui est pertinent. en quoi l'utilisation d'une variable comme dotsize, au lieu d'une valeur comme '5', nous aide t-il pour réduire les détails et se concentrer sur l'essentiel.