import { StyleSheet, View, Text, TouchableOpacity, Alert, Linking, } from 'react-native'; import React from 'react'; import useCameraApi from '../utils/useCameraAPI.ts'; import {Camera, useCameraDevice} from 'react-native-vision-camera'; import Icon from 'react-native-vector-icons/Entypo.js'; // import {CameraRoll} from '@react-native-camera-roll/camera-roll'; export default function CameraScreen() { const { requestStoragePermission, isPermission, requestGPSPermission, isGpsPermission, sendPhotoFile, } = useCameraApi(); const device = useCameraDevice('back'); const camera = React.useRef(null); // const [photoPath, setPhotoPath] = React.useState(null); React.useEffect(() => { // 카메라 및 위치 권한 확인 const checkPermissions = async () => { await requestStoragePermission(permissionGranted => { if (!permissionGranted) { Alert.alert( '카메라 권한이 없습니다.', '카메라를 사용하려면 권한을 허용해야 합니다.', [{text: '설정으로 이동', onPress: () => Linking.openSettings()}], ); console.log('카메라 권한이 거부되었습니다.'); } }); await requestGPSPermission(permissionGranted => { if (!permissionGranted) { Alert.alert( '위치 권한이 없습니다.', '위치를 사용하려면 권한을 허용해야 합니다.', [{text: '설정으로 이동', onPress: () => Linking.openSettings()}], ); console.log('위치 권한이 거부되었습니다.'); } }); }; // 디바이스 확인 if (!device) { Alert.alert( '카메라 디바이스가 없습니다.', '카메라 디바이스를 찾을 수 없습니다.', ); } checkPermissions(); }, [requestStoragePermission, requestGPSPermission, device]); // 사진 찍기 const takePhotoAsync = async () => { if (camera.current) { try { const photo = await camera.current.takePhoto(); // console.log('Photo:', photo); // photo 확인 // setPhotoPath(photo.path); // await CameraRoll.save(`file://${photo.path}`, { // type: 'photo', // }); // 사진 전송 await sendPhotoFile(photo.path); } catch (error) { console.error('Error taking photo:', error); } } }; const handleTakePhoto = async () => { await takePhotoAsync(); }; return ( {isPermission && isGpsPermission ? ( device ? ( <> {/* 찍은 사진 렌더링 */} {/* {photoPath ? ( ) : ( <> )} */} ) : ( 디바이스 없다 ) ) : ( <> )} ); } const styles = StyleSheet.create({ takePicture: { position: 'absolute', bottom: '5%', width: '100%', alignItems: 'center', justifyContent: 'center', }, });