SkillAgentSearch skills...

AndroidUVCCamera

Android外接UVC相机库,致力于使用最简单的API、最清晰的代码逻辑实现预览和拍照功能。

Install / Use

/learn @Liuguihong/AndroidUVCCamera
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

AndroidUVCCamera

最近在做一个外接USB相机的项目,github上搜了下,有很多开源的库,这些库底层基本用的都是同一套东西,但上层业务比较繁琐,使用起来很不方便,并且也不太符合项目的业务需求,所以重新封装了一下,本库只需几个简单的API即可完成预览、拍照功能,无需关注复杂的USB插拔处理逻辑。文档地址: 最好用的Android UVC Camera库

1.添加依赖

Step 1. Add the JitPack repository to your build file.Add it in your root build.gradle at the end of repositories:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

Step 2. Add the dependency

dependencies {
        implementation 'com.github.Liuguihong:AndroidUVCCamera:1.0.0'
}

2.创建UVCCameraProxy对象

UVCCameraProxy mUVCCamera = new UVCCameraProxy(this);

3.添加配置(可选)

mUVCCamera.getConfig()
         .isDebug(true) // 是否调试
         .setPicturePath(PicturePath.APPCACHE) // 图片保存路径,保存在app缓存还是sd卡
         .setDirName("uvccamera") // 图片保存目录名称
         .setProductId(0) // 产品id,用于过滤设备,不需要可不设置
         .setVendorId(0); // 供应商id,用于过滤设备,不需要可不设置

4.设置预览View

支持TextureView和SurfaceView,在其生命周期里封装了注册/注销USB插拔广播、释放相机资源等逻辑,并且自动过滤USB设备,只响应USB相机插拔。

mUVCCamera.setPreviewTexture(mTextureView); // TextureView
// mUVCCamera.setPreviewSurface(mSurfaceView); // SurfaceView

5.设置USB监听回调,并在回调里处理相关逻辑

mUVCCamera.setConnectCallback(new ConnectCallback() {
    @Override
    public void onAttached(UsbDevice usbDevice) {
        mUVCCamera.requestPermission(usbDevice); // USB设备授权
    }

    @Override
    public void onGranted(UsbDevice usbDevice, boolean granted) {
        if (granted) {
            mUVCCamera.connectDevice(usbDevice); // 连接USB设备
        }
    }

    @Override
    public void onConnected(UsbDevice usbDevice) {
        mUVCCamera.openCamera(); // 打开相机
    }

    @Override
    public void onCameraOpened() {
        mUVCCamera.setPreviewSize(640, 480); // 设置预览尺寸
        mUVCCamera.startPreview(); // 开始预览
    }

    @Override
    public void onDetached(UsbDevice usbDevice) {
        mUVCCamera.closeCamera(); // 关闭相机
    }
});

6.设置拍照按钮点击回调(可选)

mUVCCamera.setPhotographCallback(new PhotographCallback() {
    @Override
    public void onPhotographClick() {
        mUVCCamera.takePicture();
    }
});

7.设置预览回调(可选)

mUVCCamera.setPreviewCallback(new PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] yuv) {

    }
});

8.设置拍照成功图片回调(可选)

mUVCCamera.setPictureTakenCallback(new PictureCallback() {
    @Override
    public void onPictureTaken(String path) {
    
    }
});

9.拍照

mUVCCamera.takePicture();
// mUVCCamera.takePicture("test.jpg"); // 自定义图片名称,不设置则根据UUID自动保存

10.其他API

|方法|说明| |:-------------|:-------------| |registerReceiver()|注册USB插拔监听广播| |unregisterReceiver()|注销USB插拔监听广播| |checkDevice()|查找USB相机设备,会在onAttached里回调| |requestPermission(UsbDevice usbDevice)|USB设备授权,要连接USB设备必须先授权| |connectDevice(UsbDevice usbDevice)|连接USB设备| |closeDevice()|关闭USB设备| |openCamera()|打开相机| |closeCamera()|关闭相机| |setPreviewSurface(SurfaceView surfaceView)|设置预览View为SurfaceView| |setPreviewTexture(TextureView textureView)|设置预览View为TextureView| |setPreviewDisplay(Surface surface)|设置预览View,自定义| |setPreviewRotation(float rotation)|设置相机预览旋转角度,暂时只支持TextureView| |setPreviewSize(int width, int height)|设置预览尺寸| |getPreviewSize()|获取相机预览尺寸| |getSupportedPreviewSizes()|获取相机支持的预览尺寸| |startPreview()|开始预览| |stopPreview()|停止预览| |takePicture()|拍照| |takePicture(String pictureName)|拍照| |isCameraOpen()|是否已经打开相机| |getConfig()|获取配置信息| |clearCache()|删除图片缓存目录|

参考

https://github.com/saki4510t/UVCCamera

View on GitHub
GitHub Stars248
CategoryDevelopment
Updated5d ago
Forks74

Languages

Java

Security Score

80/100

Audited on Mar 31, 2026

No findings