更新记录

1.0.0(2025-08-23)

初始版本1.0.0

1、支持外置USB摄像头,内置摄像头。

2、支持拍照。


平台兼容性

uni-app(4.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟

uni-app x(4.07)

Chrome Safari Android iOS 鸿蒙 微信小程序

1、使用:

<smart-camera id="cameraView" class="cameraview" @initDone="handleCameraDone" @error="handleCameraError"></smart-camera>

2、拍照:调用takePicture()方法

takePicture: function () {
                let context = createSmartCameraContext("cameraView")
                // context?.takePicture(result => { console.log("takePicture----------success:" + result.success + "  message:" + result.message + "  uri:" + result.uri) })
                context?.takePicture(result => {
                    console.log("takePicture callback:", JSON.stringify(result));
                    // 1. 将可能为 null 的 uri 属性值赋给一个局部常量
                    const imageUri = result.uri;
                    if (result.success && imageUri != null) {
                        uni.showToast({
                            title: "拍照成功",
                            icon: "success"
                        });
                        // 【【【【【 关键:将返回的 uri 赋值给 imageSrc 】】】】】
                        // result.uri 是一个本地文件路径,可以直接用于 <image> 组件的 src
                        this.imageSrc = imageUri;
                    } else {
                        uni.showToast({
                            title: `拍照失败: ${result.message}`,
                            icon: "error"
                        });
                        // 拍照失败时可以清空旧照片
                        this.imageSrc = '';
                    }
                });
            },

3、回调摄像头变化状态方法:

​ initDone:表示已连接或连接中的状态 返回以json数据结构

​ 如:{"code":0,"msg":"正在使用内置摄像头"}

​ {"code":1,"msg":"正在连接外置摄像头"}

error:表示连接失败或断开的状态 返回以json数据结构

​ 如: {"code":-1,"msg":"外置摄像头已拔出"}

// 摄像头连接正确
    function handleCameraDone(statusData : UTSJSONObject) {
        const code = statusData.get("code") as number | null ?? 0;
        const msg = statusData.get("msg") as string | null ?? "";
        if (code == 0) {
            console.log("🚀 ~ cameraView", "已连接...")
        } else if (code == 1) {
            // 在这里处理错误状态,例如弹窗提示
            console.log("🚀 ~ cameraView", "连接中...")
        }
    }
    // 摄像头连接错误
    function handleCameraError(statusData : UTSJSONObject) {
        if (statusData.get("code") == -2) {
            //提示插拔一下
            uni.showToast({
                title: `连接失败,请尝试重新拔插摄像头!`,
                icon: 'none'
            });
        }
        //失败后尝试再打开一次,这里只尝试一次
        if (status_handOpenCamera.value == false) {
            status_handOpenCamera.value = true
            handOpenCamera()
        }
    }

4、手动打开摄像头:

function handOpenCamera() {
        const smartCameraContext = createSmartCameraContext("cameraView")
        smartCameraContext?.initCamera(callback => {
            console.log("手动打开摄像头返回", callback)
        })
    }

注意:

1、使用组件时,会自动打开摄像头。如打开失败,也可通过手动打开,调用initCamera方法。

2、在有内置和外置摄像头同时存在的情况下,会优先使用外置。如果没有外置摄像头则会使用内置,如手机。外置摄像头适用于特殊设备。

3、在使用内置摄像头时,默认使用的前置摄像头。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

"android.permission.CAMERA", "android.hardware.usb.host", "android.permission.WRITE_EXTERNAL_STORAGE",

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。