react-native-vision-camera
Version:
VisionCamera is the fastest and most powerful Camera for react-native.
56 lines (55 loc) • 1.92 kB
JavaScript
import { useCallback, useEffect, useState } from 'react';
import { AppState } from 'react-native';
import { VisionCamera } from '../VisionCamera';
function createUsePermissionFunc(getFunc, requestFunc) {
return () => {
const [status, setStatus] = useState(getFunc);
useEffect(() => {
// Re-fetch Permission on AppState change
const subscription = AppState.addEventListener('change', (state) => {
if (state === 'active') {
setStatus(getFunc());
}
});
return () => subscription.remove();
}, []);
const requestPermission = useCallback(async () => {
await requestFunc();
const newStatus = getFunc();
setStatus(newStatus);
return newStatus === 'authorized';
}, []);
return {
status: status,
requestPermission: requestPermission,
hasPermission: status === 'authorized',
canRequestPermission: status === 'not-determined',
};
};
}
/**
* Use the Camera Permission.
* @example
* ```ts
* const { hasPermission, requestPermission } = useCameraPermission()
* useEffect(() => {
* if (!hasPermission) {
* requestPermission()
* }
* }, [hasPermission, requestPermission])
* ```
*/
export const useCameraPermission = createUsePermissionFunc(() => VisionCamera.cameraPermissionStatus, () => VisionCamera.requestCameraPermission());
/**
* Use the Microphone Permission.
* @example
* ```ts
* const { hasPermission, requestPermission } = useMicrophonePermission()
* useEffect(() => {
* if (!hasPermission) {
* requestPermission()
* }
* }, [hasPermission, requestPermission])
* ```
*/
export const useMicrophonePermission = createUsePermissionFunc(() => VisionCamera.microphonePermissionStatus, () => VisionCamera.requestMicrophonePermission());