In un precedente articolo1 si è semplicemente aperta la schermata della fotocamera, ora si aggiungerà un pulsante per attivare lo scatto (e il flash).
Basta modificare il precedente codice sorgente.
// seconda pagina con un component che mostra la fotocamera in azione
import React, {useRef} from 'react';
import type {Node} from 'react';
import {StyleSheet, Button, Text, View} from 'react-native';
import {Camera, useCameraDevices, takePhoto} from 'react-native-vision-camera';
const CameraPage = (): Node => {
const devices=useCameraDevices();
const device=device.back;
const cameraRef= useRef();
const fareFoto = async () => {
if (cameraRef.current) {
try {
const foto = await cameraRef.current.takePhoto({flash:'on'});
if (foto == null) throw new Error();
log.debug(foto.path);
}
catch (errore) {
log.debug('ERRORE null: fareFoto()');
}
}
}
if (device == null) return <><Text>loading...</Text></>
return (
<Camera
device={device}
photo={true}
ref={cameraRef}
style={StyleSheet.absoluteFill}
isActive={true}
/>
<Button
onPress={fareFoto}
title='Fare click'
/>
)
}
export default CameraPage;
Oltre ad aver aggiunto alcuni import nelle prime righe, queste sono le altre tre modifiche principali:
- riga 11,
useRefhook, inizializzazione dell’oggetto nella libreria2 - riga 13, aggiunta la funzione asincrona che fa la foto
- riga 30, aggiunte gli attributi alla camera (
useRefhook e photo) - riga 36 aggiunto bottone e la funzione di gestione dell’evento
onPress
Nella finestra di debug si potrà osservare il percorso della foto appena scattata (file temporaneo).
/data/user/0/com.progetto/cache/mrousavy205385301890183282.jpg
Il difetto di questa applicazione è che le foto si accumulano inutilmente nella cache dell’applicazione.