Fix Camera permissions and enable front camera fallback on Android
This commit is contained in:
LFS
BIN
Binary file not shown.
@@ -8,6 +8,7 @@ import {
|
||||
Modal,
|
||||
TextInput,
|
||||
TouchableWithoutFeedback,
|
||||
PermissionsAndroid,
|
||||
} from 'react-native';
|
||||
import { CameraView, useCameraPermissions } from 'expo-camera';
|
||||
import * as FileSystem from 'expo-file-system';
|
||||
@@ -131,7 +132,24 @@ export default function CameraScreen({
|
||||
if (permission && !permission.granted && permission.canAskAgain) {
|
||||
requestPermission();
|
||||
}
|
||||
}, []);
|
||||
|
||||
// Specifically for ausbc native library which needs these at runtime
|
||||
if (Platform.OS === 'android') {
|
||||
const requestAndroidPerms = async () => {
|
||||
try {
|
||||
const granted = await PermissionsAndroid.requestMultiple([
|
||||
PermissionsAndroid.PERMISSIONS.CAMERA,
|
||||
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
|
||||
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
|
||||
]);
|
||||
logger.log('Android Permissions:', JSON.stringify(granted));
|
||||
} catch (err) {
|
||||
console.warn('Failed to request Android permissions', err);
|
||||
}
|
||||
};
|
||||
requestAndroidPerms();
|
||||
}
|
||||
}, [permission]);
|
||||
|
||||
// 2. Check if a USB camera is connected.
|
||||
useEffect(() => {
|
||||
@@ -400,8 +418,7 @@ export default function CameraScreen({
|
||||
}
|
||||
};
|
||||
|
||||
// On iOS we need the expo-camera permission, on Android we bypass it since we use USB
|
||||
if (Platform.OS !== 'android') {
|
||||
// Show permission block if built-in camera has no permission AND USB is not connected
|
||||
if (!permission) {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
@@ -413,7 +430,7 @@ export default function CameraScreen({
|
||||
if (!permission.granted && !isUsbConnected) {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text style={styles.infoText}>Wir benötigen deine Erlaubnis, um die Kamera anzuzeigen</Text>
|
||||
<Text style={styles.infoText}>Wir benötigen deine Erlaubnis, um die Tablet-Kamera anzuzeigen</Text>
|
||||
<TouchableOpacity style={styles.btn} onPress={requestPermission}>
|
||||
<Text style={styles.btnText}>Erlaubnis erteilen</Text>
|
||||
</TouchableOpacity>
|
||||
@@ -423,7 +440,6 @@ export default function CameraScreen({
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const renderContent = () => {
|
||||
if (isIdle) {
|
||||
@@ -628,7 +644,7 @@ export default function CameraScreen({
|
||||
{/* Camera Preview Background */}
|
||||
<View style={styles.previewContainer}>
|
||||
<View style={styles.cameraWrapper}>
|
||||
{Platform.OS === 'android' ? (
|
||||
{Platform.OS === 'android' && isUsbConnected ? (
|
||||
<UsbCameraView
|
||||
ref={usbCameraRef}
|
||||
style={[styles.cameraPreview, { position: 'absolute', opacity: 1, zIndex: 10 }]}
|
||||
|
||||
Reference in New Issue
Block a user