Advanced camera control for React Native apps - Real-time preview, photo/video capture, QR/barcode scanning, face detection using expo-camera.
- ✅ Real-time Camera Preview - Full camera control with configuration
- ✅ Photo Capture - High-quality photo capture with options
- ✅ Video Recording - Video recording with duration limits
- ✅ QR Code / Barcode Scanning - 12+ barcode types supported
- ✅ Face Detection - Face detection with bounds, angles, expressions
- ✅ Camera Configuration - Flash, zoom, ratio, torch control
- ✅ Permission Management - Built-in camera and microphone permissions
- ✅ Type-Safe - Full TypeScript support
npm install @umituz/react-native-cameranpm install expo-cameraimport { useCamera } from '@umituz/react-native-camera';
import { CameraView } from 'expo-camera';
function MyScreen() {
const {
cameraRef,
config,
toggleFacing,
takePicture,
requestCameraPermission,
} = useCamera();
useEffect(() => {
requestCameraPermission();
}, []);
const handleCapture = async () => {
const photo = await takePicture({ quality: 0.9 });
console.log('Photo URI:', photo?.uri);
};
return (
<CameraView
ref={cameraRef}
facing={config.facing}
flash={config.flash}
zoom={config.zoom}
mode={config.mode}
/>
);
}import { useBarcodeScanner } from '@umituz/react-native-camera';
import { CameraView } from 'expo-camera';
function BarcodeScanner() {
const {
isScanning,
handleBarcodeScan,
barcodeTypes,
validationResult,
} = useBarcodeScanner({
onBarcodeScanned: (result, validation) => {
if (validation.valid) {
Alert.alert('Scanned', validation.formatted);
}
},
});
return (
<CameraView
facing="back"
barcodeScannerSettings={{ barcodeTypes }}
onBarcodeScanned={isScanning ? handleBarcodeScan : undefined}
/>
);
}import { useQRScanner } from '@umituz/react-native-camera';
const { handleBarcodeScan, barcodeTypes } = useQRScanner({
onBarcodeScanned: (result, validation) => {
console.log('QR Code:', validation.data);
},
});import { useProductBarcodeScanner } from '@umituz/react-native-camera';
const { handleBarcodeScan, barcodeTypes } = useProductBarcodeScanner({
onBarcodeScanned: (result, validation) => {
console.log('Product Barcode:', validation.data);
},
});const {
config,
setFacing,
setFlash,
setZoom,
toggleTorch,
toggleFacing,
} = useCamera();
// Switch to front camera
setFacing('front');
// Enable flash
setFlash('on');
// Set zoom level (0-1)
setZoom(0.5);
// Toggle torch
toggleTorch();
// Toggle front/back camera
toggleFacing();const {
startRecording,
stopRecording,
isRecording,
requestMicrophonePermission,
} = useCamera();
const handleRecord = async () => {
await requestMicrophonePermission();
await startRecording({ maxDuration: 30, quality: '1080p' });
// ... wait for user to stop
const video = await stopRecording();
console.log('Video URI:', video?.uri);
};React hook for camera operations.
Returns:
config- Camera configurationsetFacing(facing)- Set camera facing (front/back)setFlash(flash)- Set flash mode (on/off/auto)setZoom(zoom)- Set zoom level (0-1)setAutofocus(autofocus)- Set autofocus (on/off)setMode(mode)- Set camera mode (picture/video)setRatio(ratio)- Set camera ratio (4:3/16:9/1:1)toggleTorch()- Toggle torch/flashlighttoggleFacing()- Toggle front/back camerarequestCameraPermission()- Request camera permissionrequestMicrophonePermission()- Request microphone permissiontakePicture(options?)- Take picturestartRecording(options?)- Start video recordingstopRecording()- Stop video recordingisRecording- Recording stateisReady- Camera ready stateerror- Error messagecameraRef- Camera ref for CameraView component
React hook for barcode/QR code scanning.
Options:
scanInterval- Milliseconds between scans (default: 2000)barcodeTypes- Array of barcode types to scanonBarcodeScanned- Callback when barcode is scannedautoStart- Auto-start scanning (default: false)
Returns:
isScanning- Scanning statelastScannedCode- Last scanned barcode resultvalidationResult- Validation resultstartScanning()- Start scanningstopScanning()- Stop scanninghandleBarcodeScan(result)- Handle barcode scan eventbarcodeTypes- Current barcode typessetBarcodeTypes(types)- Set barcode typesscanInterval- Current scan intervalsetScanInterval(interval)- Set scan intervalisURL(data)- Check if data is URLisProductBarcode(type)- Check if type is product barcode
Convenience hook for QR code scanning only.
Convenience hook for product barcode scanning (EAN, UPC, etc.).
Static service class for camera operations.
Methods:
requestCameraPermission()- Request camera permissionrequestMicrophonePermission()- Request microphone permissiongetCameraPermissionStatus()- Get camera permission statusgetMicrophonePermissionStatus()- Get microphone permission statusisAvailable()- Check if device has cameragetAvailableCameraTypes()- Get available camera typesgetDefaultConfig()- Get default camera configurationvalidateConfig(config)- Validate camera configuration
Static service class for barcode scanning.
Methods:
getAllBarcodeTypes()- Get all supported barcode typesgetQRCodeOnlyConfig()- Get QR code only configurationgetProductBarcodeTypes()- Get product barcode typesgetDocumentBarcodeTypes()- Get document barcode typesvalidateBarcode(result)- Validate barcode resultisURL(data)- Check if data is URLisProductBarcode(type)- Check if type is product barcodeparseQRCodeData(data)- Parse QR code datacreateScanThrottler(intervalMs)- Create scan throttler
CameraType- 'front' | 'back'FlashMode- 'on' | 'off' | 'auto'AutoFocus- 'on' | 'off'CameraMode- 'picture' | 'video'VideoQuality- '2160p' | '1080p' | '720p' | '480p'CameraRatio- '4:3' | '16:9' | '1:1'BarcodeType- Enum of supported barcode typesCameraConfig- Camera configurationCameraPicture- Captured picture resultCameraVideo- Recorded video resultBarcodeScannedResult- Barcode scanning resultBarcodeValidationResult- Barcode validation result
- QR Code
- PDF417
- Aztec
- Code 39
- Code 93
- Code 128
- Data Matrix
- EAN-8
- EAN-13
- ITF-14
- UPC-E
- UPC-A
MIT
Ümit UZ umit@umituz.com