更新记录

1.0.0(2026-05-09)

安卓原生相机设备拍照,安卓USB摄像外接设备预览和拍照,返回base64图片


平台兼容性

uni-app(5.07)

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

安卓原生相机设备拍照,安卓USB摄像外接设备预览和拍照,返回base64图片

需要打包自定调试包测试才能使用

由于使用的是 Camera1的方法可能会出现警告,无视即可 warning: 'class Camera : Any' is deprecated. Deprecated in Java.

完整页面使用方法:

vue2的需要自己去设置一下调用方法,案例写的是vue3的方式

<template>
    <view>

        <button @click="Camera1List">获取当前摄像头设备ID列表</button>
        <button @click="Camera1Open">打开摄像头设备</button>
        <button @click="Camera1Picture">摄像头设备拍照</button>
        <button @click="Camera1Closed">关闭摄像头设备</button>
        <button @click="Camera1Hide(false)">隐藏摄像头设备</button>
        <button @click="Camera1Hide(true)">显示摄像头设备</button>

        <view class="sssAD"></view>
        <image class="sssimg" :src="img" mode="aspectFill"></image>

    </view>
</template>

<script setup>
    import {
        onShow,
        onReady,
        onReachBottom,
        onPullDownRefresh,
        onShareAppMessage
    }
    from '@dcloudio/uni-app';
    import {
        getCurrentInstance,
        ref,
        reactive,
        inject,
        computed,
        onMounted
    } from 'vue';

    let img = ref(``);

    //插件调用方法
    import {
        UTSCamera1List,
        UTSCamera1Open,
        UTSCamera1Picture,
        UTSCamera1Closed,
        UTSCamera1Hide
    } from "@/uni_modules/mushan-natcamera";

    /*
        获取当前相机设备列表总数
        返回参数  {"data":2,"msg":"ok"},msg为ok是获取成功,data是获取到当前识别到的相机设备总数
        比如:
        如果data返回2 相机id分别就是(0,1)
        如果data返回3 相机id分别就是(0,1,2)
        以此类推 那个id对应那个相机,需要自己打开试一下
    */
    function Camera1List(){
        UTSCamera1List((res)=>{
            let resData = JSON.parse(res)
            console.log(resData);
        })
    }

    /*
        打开相机设备
        返回参数  {"msg":"ok"},msg为ok是打开成功
        以下为案例式样
        cameraId 通过UTSCamera1List 获取总数后对应的id,通常都是从0开始;
        widthView 预览显示的宽,按设备整体宽度百分比1为设备的宽。0.5为一半宽
        heightView 预览显示的高,按设备整体高度百分比1为设备的高。0.5为一半高
        topMargin 预览与顶部的距离,1为整个设备的高距离,0.5为一半
        leftMargin 预览与左边的距离,1为整个设备的宽距离,0.5为一半
        cameraRotate 预览画面旋转角度通常都是 0 90 180 270 360
        circleShow 预览画面是否按圆形显示 false,true
    */
    function Camera1Open(){
        uni.getSystemInfo({
            success: function(res) {
                console.log(res);
                let windowWidth = res.windowWidth
                let windowHeight = res.windowHeight
                const query = uni.createSelectorQuery();
                query.select('.sssAD').boundingClientRect().exec((ret) => {
                    console.log(ret);

                    let vWidth = (ret[0].width/windowWidth).toFixed(2)
                    let vHeight = (ret[0].height/windowHeight).toFixed(2)
                    let vTop = (ret[0].top/windowHeight).toFixed(2)
                    let vLeft = (ret[0].left/windowWidth).toFixed(2)

                    let parame = {
                        cameraId:Number(0),
                        cameraRotate:Number(0),
                        widthView:Number(vWidth),
                        heightView:Number(vHeight),
                        topMargin:Number(vTop),
                        leftMargin:Number(vLeft),
                        circleShow:false,
                    }

                    UTSCamera1Open(parame,(res)=>{
                        let resData = JSON.parse(res)
                        console.log(resData);
                        if(resData.msg == 'ok'){

                        }else if(resData.msg == '用户拒绝了部分权限'){
                            Camera1Open();
                        }

                    })

                })
            }
        });
    }

    /*
        相机设备拍照,返回base64
        返回参数  {"msg":"ok"},msg为ok是拍照成功
        cameraId 打开的摄像头对应的id,通常都是从0开始;
        imgQuality 拍照的图片质量 0-100
        imgWidth 拍照的图片宽
        imgHeight 拍照的图片高
        imgRotate 拍照的图片旋转角度
        imgMirror 拍照的图片是否镜像翻转,true 翻转,false 不翻转
    */
    function Camera1Picture(){
        let parame = {
            cameraId:Number(0),
            imgQuality:Number(70),
            imgWidth:Number(640),
            imgHeight:Number(480),
            imgRotate:Number(90),
            imgMirror:true,
        }
        UTSCamera1Picture(parame,(res)=>{
            let resData = JSON.parse(res)
            if(resData.msg == 'ok'){
                img.value = filterBase64(resData.data);
            }
        })
    }
    function filterBase64(codeImages) {
        return codeImages.replace(/[\r\n]/g, "");
    }

    /*
        相机设备预览关闭
        返回参数  {"msg":"ok"},msg为ok关闭成功
        cameraId 打开的摄像头对应的id,通常都是从0开始;
    */
    function Camera1Closed(){
        let parame = {
            cameraId:Number(0),
        }
        UTSCamera1Closed(parame, (res) => {
            let resData = JSON.parse(res);
            if (resData.msg === 'ok') {

            }
        });
    }

    /*
        相机设备预览隐藏
        返回参数  {"msg":"ok"},msg为ok 
        cameraId 打开的摄像头对应的id,通常都是从0开始;
        cameraShow true 显示,false隐藏
    */
    function Camera1Hide(type){
        let parame = {
            cameraId:Number(0),
            cameraShow:type,
        }
        UTSCamera1Hide(parame,(res) => {
            let resData = JSON.parse(res);
            if (resData.msg === 'ok') {

            }
        });
    }

</script>

<style lang="scss" scoped>
    .sssAD{
        width: 300rpx;
        height: 300rpx;
        background-color: red;
        float: left;
    }
    .sssimg{
        width: 300rpx;
        height: 300rpx;
        background-color: #cccccc;
        float: left;
    }
</style>

隐私、权限声明

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

<uses-permission android:name="android.permission.CAMERA" />

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

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

暂无用户评论。