AndroidUsbCamera_not_working

Is there any official Android library to access an external USB camera?

I have gone through all the Android camera samples, but I couldn’t get my external USB camera to be detected or listed with the following code. I also checked other libraries like saki4510t/UVCCamera and jiangdongguo/AndroidUSBCamera, but they are either outdated or not working. The official Android documentation on external USB cameras does not provide a proper way to implement it in Kotlin or Java. I couldn’t find the latest documentation on this.


I tried integrating it myself, but it’s not working. Here’s the code I used:

private fun requestUsbPermissions() {
        val usbManager = getSystemService(Context.USB_SERVICE) as UsbManager
        val deviceList = usbManager.deviceList
        val deviceIterator = deviceList.values.iterator()
        while (deviceIterator.hasNext()) {
            val device = deviceIterator.next()
            if (!usbManager.hasPermission(device)) {
                val permissionIntent = PendingIntent.getBroadcast(
                    this, 0, Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_IMMUTABLE
                )
                usbManager.requestPermission(device, permissionIntent)
            } else {
                listAvailableCameras()
            }
        }
    }

    private val usbReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val action = intent.action
            if (ACTION_USB_PERMISSION == action) {
                synchronized(this) {
                    val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        device?.let {
                            listAvailableCameras()  // Refresh camera listing
                        }
                    } else {
                    }
                }
            } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED == action) {
                requestUsbPermissions()
            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED == action) {
            }
        }
    }

    private fun listAvailableCameras() {
        try {
            val cameraIdList = cameraManager.cameraIdList
            for (cameraId in cameraIdList) {
                val characteristics = cameraManager.getCameraCharacteristics(cameraId)
                val facing = characteristics.get(CameraCharacteristics.LENS_FACING)
                logCameraCharacteristics(characteristics, cameraId)

                if (facing == CameraCharacteristics.LENS_FACING_EXTERNAL) {
                    selectedCameraId = cameraId
                    return
                }
            }

            // Default to internal camera
            selectedCameraId = cameraIdList.firstOrNull() ?: throw CameraAccessException(CameraAccessException.CAMERA_ERROR)
        } catch (e: CameraAccessException) {
            e.printStackTrace()
        }
    }

    private fun logCameraCharacteristics(characteristics: CameraCharacteristics, cameraId: String) {
        val facing = characteristics.get(CameraCharacteristics.LENS_FACING)
        val facingStr = when (facing) {
            CameraCharacteristics.LENS_FACING_FRONT -> "FRONT"
            CameraCharacteristics.LENS_FACING_BACK -> "BACK"
            CameraCharacteristics.LENS_FACING_EXTERNAL -> "EXTERNAL"
            else -> "UNKNOWN"
        }

        val outputFormats = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)?.outputFormats
        val fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)

    }

    private fun openCamera(cameraId: String) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            return
        }
        try {

            cameraManager.openCamera(cameraId, object : CameraDevice.StateCallback() {
                override fun onOpened(camera: CameraDevice) {
                    cameraDevice = camera
                    startCameraPreview()
                }

                override fun onDisconnected(camera: CameraDevice) {
                    camera.close()
                }

                override fun onError(camera: CameraDevice, error: Int) {
                    camera.close()
                }
            }, backgroundHandler)
        } catch (e: CameraAccessException) {
            e.printStackTrace()
        }
    }

This is the error I am getting:

2024-07-01 13:51:09.578 27203-27373 Perf                    com.aditya.androidcamera             E  getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2024-07-01 13:51:09.580 27203-27373 Perf                    com.aditya.androidcamera             E  Fail to get file list com.aditya.androidcamera
2024-07-01 13:51:09.580 27203-27373 Perf                    com.aditya.androidcamera             E  getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2024-07-01 13:51:09.630 27203-27203 AppCompatDelegate       com.aditya.androidcamera             D  Checking for metadata for AppLocalesMetadataHolderService : Service not found
2024-07-01 13:51:09.685 27203-27203 a.androidcamer          com.aditya.androidcamera             W  Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2024-07-01 13:51:09.689 27203-27203 MainActivity            com.aditya.androidcamera             I  Listing available cameras...
2024-07-01 13:51:09.690 27203-27203 CameraManagerGlobal     com.aditya.androidcamera             I  Connecting to camera service
2024-07-01 13:51:09.698 27203-27203 MainActivity            com.aditya.androidcamera             I  Camera ID: 0, Facing: BACK
2024-07-01 13:51:09.736 27203-27203 MainActivity            com.aditya.androidcamera             I  Supported FPS Ranges: [1, 10], [10, 10], [1, 15], [15, 15], [1, 30], [30, 30]
2024-07-01 13:51:09.737 27203-27203 MainActivity            com.aditya.androidcamera             I  Supported Output Formats: 256, 34, 35
2024-07-01 13:51:09.739 27203-27203 MainActivity            com.aditya.androidcamera             I  Camera ID: 1, Facing: FRONT
2024-07-01 13:51:09.740 27203-27203 MainActivity            com.aditya.androidcamera             I  Supported FPS Ranges: [1, 10], [10, 10], [1, 15], [15, 15], [1, 30], [30, 30]
2024-07-01 13:51:09.740 27203-27203 MainActivity            com.aditya.androidcamera             I  Supported Output Formats: 256, 34, 35
2024-07-01 13:51:09.740 27203-27203 MainActivity            com.aditya.androidcamera             I  Selected internal camera: 0
2024-07-01 13:51:09.787 27203-27376 AdrenoGLES              com.aditya.androidcamera             I  PFP: 0x016ee187, ME: 0x00000000
2024-07-01 13:51:09.788 27203-27376 AdrenoUtils             com.aditya.androidcamera             W  <ReadGpuID_from_sysfs:194>: Failed to open /sys/class/kgsl/kgsl-3d0/gpu_model
2024-07-01 13:51:09.788 27203-27376 AdrenoUtils             com.aditya.androidcamera             W  <ReadGpuID:218>: Failed to read chip ID from gpu_model. Fallback to use the GSL path
2024-07-01 13:51:09.799 27203-27203 MainActivity            com.aditya.androidcamera             I  Opening camera with ID: 0
2024-07-01 13:51:09.803 27203-27203 libc                    com.aditya.androidcamera             E  Access denied finding property "persist.vendor.camera.privapp.list"

Questions:

  1. Is there any official or recommended library to handle USB cameras in Android?

  2. Why isn’t my external USB camera being detected or listed with the above code? Am I missing any specific permissions or configurations?

  3. Are there any comprehensive guides or up-to-date libraries for integrating external USB cameras in Android?

New contributor

Aditya Kumar Singh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật