Nel precedente post1 si è installata la libreria per usare la fotocamera e si è corretto un bug durante la compilazione. Ora si attiveranno i permessi e si aprirà la fotocamera (posta sul retro).
Articolo:
appunti di informatica
Si può leggere qui il codice e i commenti al codice di un component (tuttavia, per brevità il componente principale App non è pubblicato).
Probabilmente è più comodo mettere in due diverse pagine la funzione di richiesta dei permessi per la fotocamera e la funzione (componente) che visualizza la schermata della fotocamera aperta.
Questa è la funzione per la richiesta dei permessi (è asincrona)
Contrariamente alla logica, non è sufficiente attivare i permessi dalla parte del sistema operativo, ma è obbligatorio che l’applicazione faccia la domanda all’utente al momento del primo avvio. Non è logico, ma è obbligatorio, altrimenti si rischia di vedere una schermata bianca (oppure nera)
// funzione che elabora la richiesta dei permessi per la fotocamera
import React from 'react';
import type {Node} from 'react';
import {requestCameraPermission} from 'react-native-vision-camera';
async function elaboraRichiesta() {
try {
const richiesta=await Camera.requestCameraPermission();
if (!richiesta) {
throw new Error('errore richiesta null');
}
return richiesta;
} catch (errore) {
console.log('errore richiesta');
}
}
export default elaboraRichiesta;
Questa è la funzione per visualizzare la schermata della fotocamera aperta
// seconda pagina con un component che mostra la fotocamera in azione
import React from 'react';
import type {Node} from 'react';
import {StyleSheet, Text, View} from 'react-native';
import {Camera, useCameraDevices} from 'react-native-vision-camera';
const CameraPage = (): Node => {
// legge tutte le camere disponibili (di solito 'back' e 'front')
const devices=useCameraDevices();
// prende solo la camera posta sul retro
const device=device.back;
// questo if è obbligatorio, infatti, in realtà, serve ad attivare la fotocamera
if (device == null) return <><Text>loading...</Text></>
return (
<Camera
// tutte e tre le righe sono obbligatorie, altrimenti non si vede
style={StyleSheet.absoluteFill}
isActive={true}
device={device}
/>
)
}
export default CameraPage;
- https://www.cancellino.org/2023/02/fotocamera/ [↩]