diff --git a/android/app/build/outputs/apk/debug/app-debug.apk b/android/app/build/outputs/apk/debug/app-debug.apk index 6096e8c1..30c33a47 100644 Binary files a/android/app/build/outputs/apk/debug/app-debug.apk and b/android/app/build/outputs/apk/debug/app-debug.apk differ diff --git a/android/app/build/outputs/apk/release/app-release.apk b/android/app/build/outputs/apk/release/app-release.apk deleted file mode 100644 index 38b5dab2..00000000 Binary files a/android/app/build/outputs/apk/release/app-release.apk and /dev/null differ diff --git a/modules/usb-camera/android/src/main/java/expo/modules/usbcamera/UsbCameraView.kt b/modules/usb-camera/android/src/main/java/expo/modules/usbcamera/UsbCameraView.kt index 1a2a665c..bba67a22 100644 --- a/modules/usb-camera/android/src/main/java/expo/modules/usbcamera/UsbCameraView.kt +++ b/modules/usb-camera/android/src/main/java/expo/modules/usbcamera/UsbCameraView.kt @@ -53,6 +53,29 @@ class UsbCameraView(context: Context, appContext: AppContext) : ExpoView(context e.printStackTrace() } + val permissionReceiver = object : android.content.BroadcastReceiver() { + override fun onReceive(context: Context, intent: android.content.Intent) { + if ("com.schnappix.USB_PERMISSION" == intent.action) { + synchronized(this) { + val granted = intent.getBooleanExtra(android.hardware.usb.UsbManager.EXTRA_PERMISSION_GRANTED, false) + if (granted) { + android.util.Log.e("UsbCameraView", "Permission granted from Broadcast!") + startPreview() + } else { + android.util.Log.e("UsbCameraView", "Permission denied from Broadcast!") + } + } + } + } + } + + val filter = android.content.IntentFilter("com.schnappix.USB_PERMISSION") + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) { + activityContext.registerReceiver(permissionReceiver, filter, Context.RECEIVER_EXPORTED) + } else { + activityContext.registerReceiver(permissionReceiver, filter) + } + cameraClient = CameraClient.newBuilder(activityContext) .setCameraStrategy(CameraUvcStrategy(activityContext)) .setCameraRequest(cameraRequest) diff --git a/src/screens/CameraScreen.tsx b/src/screens/CameraScreen.tsx index f06ac3d5..6da423ab 100644 --- a/src/screens/CameraScreen.tsx +++ b/src/screens/CameraScreen.tsx @@ -400,26 +400,29 @@ export default function CameraScreen({ } }; - if (!permission) { - return ( - - Berechtigungen werden geladen... - - ); - } + // On iOS we need the expo-camera permission, on Android we bypass it since we use USB + if (Platform.OS !== 'android') { + if (!permission) { + return ( + + Berechtigungen werden geladen... + + ); + } - if (!permission.granted && !isUsbConnected) { - return ( - - Wir benötigen deine Erlaubnis, um die Kamera anzuzeigen - - Erlaubnis erteilen - - - Zurück - - - ); + if (!permission.granted && !isUsbConnected) { + return ( + + Wir benötigen deine Erlaubnis, um die Kamera anzuzeigen + + Erlaubnis erteilen + + + Zurück + + + ); + } } const renderContent = () => { @@ -625,20 +628,20 @@ export default function CameraScreen({ {/* Camera Preview Background */} - {Platform.OS === 'android' && ( + {Platform.OS === 'android' ? ( + ) : ( + )} - -