Camera2 – Tout ce que vous vouliez savoir | par tomerpacific | Août 2021
Composants – Configuration
L’API Camera2 introduit plusieurs nouvelles interfaces et classes. Décomposons chacun d’eux afin de mieux comprendre comment les utiliser.
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 :
- onSurfaceTextureDisponible
- onSurfaceTextureSizeChanged
- onSurfaceTextureMise à jour
- 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 :
- CameraId – Chaîne
- CameraDevice.StateCallback
- 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.
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