Skip to content

本项目展示了如何在 Android Jetpack Compose 中集成并使用 AndroidUSBCamera 库,以实现 USB 摄像头接入功能。

Notifications You must be signed in to change notification settings

halifox/AndroidUSBCameraCompose

Repository files navigation

Android USB Camera & Jetpack Compose 示例

快速接入并使用

  1. 在 build.gradle 中添加依赖:
    implementation("com.herohan:UVCAndroid:1.0.9")
  1. 使用
@Composable
fun AndroidUsbCamera(usbDevice: UsbDevice?, modifier: Modifier = Modifier) {
    if (usbDevice == null) return
    val context = LocalContext.current
    val surfaceView = remember { SurfaceView(context) }
    DisposableEffect(usbDevice) {
        val mCameraHelper = CameraHelper()
        mCameraHelper.setStateCallback(object : ICameraHelper.StateCallback {
            override fun onAttach(device: UsbDevice?) {}
            override fun onDeviceOpen(device: UsbDevice?, isFirstOpen: Boolean) {}
            override fun onCameraOpen(device: UsbDevice?) {}
            override fun onCameraClose(device: UsbDevice?) {}
            override fun onDeviceClose(device: UsbDevice?) {}
            override fun onDetach(device: UsbDevice?) {}
            override fun onCancel(device: UsbDevice?) {}
        })
        mCameraHelper.selectDevice(usbDevice)
        mCameraHelper.openCamera()
        mCameraHelper.addSurface(surfaceView.holder.surface, false)
        mCameraHelper.startPreview()
        onDispose {
            mCameraHelper.removeSurface(surfaceView.holder.surface)
            mCameraHelper.release()
        }
    }
    AndroidView({ surfaceView }, modifier)
}

示例

@Composable
fun AndroidUsbCameraDemo(modifier: Modifier = Modifier) {
    val context = LocalContext.current
    val mCameraHelper = CameraHelper()
    var usbDevice by remember { mutableStateOf<UsbDevice?>(null) }
    DisposableEffect(Unit) {
        //
        fun setUsbDevice() {
            val deviceList = mCameraHelper.deviceList.filter { it.productName == "USB Video" }
            usbDevice = deviceList.getOrNull(0)
        }


        setUsbDevice()
        //息屏后 亮屏前对应的USB设备的deviceName会发生改变 所以监听亮屏广播 重新获取设备列表
        val receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                if (intent.action == Intent.ACTION_SCREEN_ON) {
                    MainScope().launch {
                        delay(2000)//亮屏后 重新获取usb设备需要时间
                        setUsbDevice()
                    }
                }
            }
        }
        context.registerReceiver(receiver, IntentFilter(Intent.ACTION_SCREEN_ON))
        onDispose {
            context.unregisterReceiver(receiver)
            mCameraHelper.release()
        }
    }
    AndroidUsbCamera(usbDevice, modifier)
}

资源

About

本项目展示了如何在 Android Jetpack Compose 中集成并使用 AndroidUSBCamera 库,以实现 USB 摄像头接入功能。

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages