> 技术文档 > Android Studio中调用USB摄像头

Android Studio中调用USB摄像头

在 Android Studio 中调用 USB 摄像头,通常要借助 Android 的 USB Host API 或第三方 UVC(USB Video Class)库。下面是一个基于开源 UVCCamera 项目的示例流程和代码(Java):


1. 添加依赖

app/build.gradle 中加入 UVCCamera 库(以 saki4510t 的 UVCCamera 为例):

dependencies { // UVCCamera 核心库 implementation \'com.serenegiant:common:2.1.5\' // 可根据最新版本号调整 implementation \'com.serenegiant:uvccamera:2.1.5\'}

并在同一个文件的 android {} 节中启用 USB Host 特性:

android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 33 } ...}

2. 在 AndroidManifest.xml 中申请权限

                ... 

3. 布局文件(res/layout/activity_usb_camera.xml)

  

4. USB 授权广播接收器(UsbReceiver.java)

package com.example.usbcamera;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.hardware.usb.UsbManager;public class UsbReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) { // 可在此处自动启动 Activity 或请求权限 } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { // 处理设备拔出 } }}

5. 调用 USB 摄像头的 Activity(UsbCameraActivity.java)

package com.example.usbcamera;import android.app.Activity;import android.hardware.usb.UsbDevice;import android.hardware.usb.UsbManager;import android.os.Bundle;import android.view.SurfaceView;import android.view.ViewGroup;import android.widget.Toast;import com.serenegiant.usb.CameraDialog;import com.serenegiant.usb.USBMonitor;import com.serenegiant.usb.UVCCamera;public class UsbCameraActivity extends Activity { private USBMonitor mUSBMonitor; private UVCCamera mUVCCamera; private SurfaceView mSurfaceView; private final USBMonitor.OnDeviceConnectListener mOnDeviceConnectListener = new USBMonitor.OnDeviceConnectListener() { @Override public void onAttach(UsbDevice device) { // 设备插入时自动弹出选择对话框 CameraDialog.showDialog(UsbCameraActivity.this, mUSBMonitor); } @Override public void onConnect(UsbDevice device, USBMonitor.UsbControlBlock ctrlBlock, boolean createNew) { // 打开摄像头并开始预览 mUVCCamera = new UVCCamera(); mUVCCamera.open(ctrlBlock); mUVCCamera.setPreviewSize(640, 480, UVCCamera.FRAME_FORMAT_MJPEG); mUVCCamera.startPreview(mSurfaceView.getHolder()); } @Override public void onDisconnect(UsbDevice device, USBMonitor.UsbControlBlock ctrlBlock) { stopCamera(); } @Override public void onDettach(UsbDevice device) { } @Override public void onCancel(UsbDevice device) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_usb_camera); mSurfaceView = findViewById(R.id.camera_view); // 注意:CameraViewInterface 实际可能是 SurfaceView 或 TextureView 的实现 if (mSurfaceView instanceof SurfaceView) { ((SurfaceView)mSurfaceView).getHolder().addCallback(null); } mUSBMonitor = new USBMonitor(this, mOnDeviceConnectListener); } @Override protected void onStart() { super.onStart(); mUSBMonitor.register(); // 注册 USB 监控 } @Override protected void onStop() { super.onStop(); mUSBMonitor.unregister(); // 注销 USB 监控 stopCamera(); } private void stopCamera() { if (mUVCCamera != null) { mUVCCamera.stopPreview(); mUVCCamera.close(); mUVCCamera = null; } } @Override protected void onDestroy() { super.onDestroy(); mUSBMonitor.destroy(); // 销毁资源 }}

核心流程说明

  1. 检测 USB 设备:通过 USBMonitor 注册监听,当有设备插入时,弹出 CameraDialog 让用户授权。

  2. 打开摄像头:用户授权后,在 onConnect() 中通过 UsbControlBlock 打开 UVC 摄像头实例,并设置分辨率与预览格式。

  3. 开始预览:调用 startPreview(),把图像输出到你的 SurfaceViewTextureView

  4. 生命周期管理:在 onStart/onStop/onDestroy 中正确注册、注销和销毁 USBMonitorUVCCamera

这样,就可以在 Android Studio 的项目中,通过 USB Host API 调用并预览 USB 摄像头了。

如果需要拍照或录视频,只需进一步调用

mUVCCamera.captureStill()mUVCCamera.startRecording() 等方法即可。