Android

Camera2 – Tout ce que vous vouliez savoir | par tomerpacific | Août 2021

Le 3 août 2021 - 3 minutes de lecture

Composants – Configuration

Personne n’a dit que c’était facile

Tout d’abord, commençons par TextureView.

Une TextureView est un composant d’interface utilisateur utilisé pour afficher un flux de contenu (pensez à la vidéo). Nous devons utiliser une TextureView pour afficher le flux de la caméra, soit par aperçu, soit avant de prendre la photo/vidéo. Deux propriétés qu’il est important d’utiliser en relation avec TextureView sont :

  • Champ SurfaceTexture
  • Interface SurfaceTextureListener

Le premier est l’endroit où le contenu sera affiché et le second a quatre rappels :

  1. onSurfaceTextureDisponible
  2. onSurfaceTextureSizeChanged
  3. onSurfaceTextureMise à jour
  4. onSurfaceTextureDétruit

Le premier rappel est crucial lors de l’utilisation de la caméra car nous voulons être avertis lorsque SurfaceTexture est disponible afin que nous puissions commencer à afficher le flux dessus. Sachez que ce n’est que lorsque TextureView est attaché à une fenêtre qu’il devient disponible.

L’interaction avec la caméra a changé depuis l’API précédente. Nous avons maintenant le CameraManager. Il s’agit d’un service système qui nous permet d’interagir avec les objets CameraDevice. Les méthodes auxquelles vous voulez prêter attention sont :

Une fois que nous savons que TextureView est disponible et prêt, nous devons appeler openCamera pour ouvrir une connexion à la caméra. Cette méthode prend trois arguments :

  1. CameraId – Chaîne
  2. CameraDevice.StateCallback
  3. Un gestionnaire

L’argument CameraId indique à quelle caméra nous voulons nous connecter. Sur votre téléphone, il y a principalement deux caméras, l’avant et l’arrière. Chacun a son propre identifiant unique. Habituellement, c’est zéro ou un. Comment obtenons-nous l’identifiant de la caméra ? Nous utilisons la méthode getCamerasIdList de CameraManager. Il renverra un tableau de type String de tous les identifiants de caméra identifiés à partir de l’appareil.

Veuillez ne pas tenir compte de tout ce qui concerne ImageReader comme cela sera expliqué plus tard

L’argument suivant est un rappel de l’état de la caméra après avoir essayé de l’ouvrir. Si vous y réfléchissez, il ne peut y avoir que plusieurs résultats pour cette action :

  • La caméra parvient à s’ouvrir avec succès
  • La caméra se déconnecte
  • une erreur se produit

Et c’est ce que vous trouverez dans CameraDevice.StateCallback

Le troisième argument concerne l’endroit où ce travail aura lieu. Puisque nous ne voulons pas occuper le fil principal, il est préférable de faire ce travail en arrière-plan. C’est pourquoi nous devons lui remettre un Handler. Il serait sage d’avoir cette instance de gestionnaire instanciée avec un thread de notre choix afin que nous puissions lui déléguer le travail.

Avec tout ce que nous avons fait, nous pouvons maintenant appeler openCamera :

Donc dans le onOuvert rappel, nous pouvons commencer à traiter de la logique de la présentation du flux de la caméra à l’utilisateur via TextureView.

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.