Skip to content

使用方法

安卓相机操作UTS原生插件集成了相机常用功能,拍照,录像,曝光调节,焦距调节,闪光点开关灯,拍照可自定义水印,支持静默拍照和录像,插件支持uniapp和uniapp x,支持vue2和vue3的选项式和组合式

提醒

如果插件需要扩展其他功能请联系作者

插件使用注意事项

  • 如果您在使用插件的过程中有任何问题,可以联系作者,作者将全力协助您使用插件
  • 本文档同时提供了uniapp的用法示例和uniappx的用法示例,插件市场导入的示例项目仅为uniapp的用法示例,如果您需要uniappx的示例项目可以通过下方的链接下载示例

    https://pan.baidu.com/s/1osISE6d4yKmlcuz_N9fA4w?pwd=k8kh

  • 组件只能在nvue/uvue页面中使用,不支持vue页面

相关链接

联系作者

关注微信公众号可联系作者

插件地址

https://ext.dcloud.net.cn/plugin?id=27184

权限

  • android.permission.CAMERA
  • android.hardware.camera
  • android.hardware.camera.autofocus
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.READ_EXTERNAL_STORAGE

API用法

在使用插件的地方引入以下代码:

js
import * as module from "@/uni_modules/leven-uts-camera"
js
import * as module from "@/uni_modules/leven-uts-camera"

组件用法

在使用插件的地方引入以下代码:

vue
<leven-uts-camera ref="refCamera" style="flex:1; height: 500px;" :config="config" @onError="onError"
  @onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-uts-camera>
vue
<leven-uts-camera ref="refLevenCamera" style="flex:1; height: 500px;" :configX="config" @onError="onError"
  @onEventMethod="onEventMethod">
</leven-uts-camera>

//组件的引用
const refLevenCamera = ref<LevenUtsCameraElement | null>(null)

页面内容

API页面

vue
<template>
  <view class="content">
    <uni-card title="其他功能">
      <button type="primary" @click="requestPermissions">申请插件所需权限</button>
      <button type="primary" @click="checkAllFilesPermission">检查是否有所有文件访问权限</button>
      <button type="primary" @click="toAllFilesPermissionPage">跳转到所有文件访问权限页面</button>
      <button type="primary" @click="toPage('noPreview')">静默模式</button>
      <button type="primary" @click="toPage('preview')">预览模式</button>
    </uni-card>
  </view>
</template>

<script>
  // const module = uni.requireNativePlugin("leven-camera-CameraModule");
  import * as module from "@/uni_modules/leven-uts-camera"
  export default {
    data() {
      return {}
    },
    onLoad() {

    },
    methods: {
      //跳转页面
      toPage(type) {
        switch (type) {
          case 'noPreview':
            uni.navigateTo({
              url: "/pages/index/noPreview"
            })
            break;
          case 'preview':
            uni.navigateTo({
              url: "/pages/index/preview"
            })
            break;
        }
      },
      requestPermissions() {
        module.requestPermissions({
          //参数
          params: {
            permissions: [
              'android.permission.WRITE_EXTERNAL_STORAGE',
              'android.permission.READ_EXTERNAL_STORAGE',
              'android.permission.RECORD_AUDIO',
              'android.permission.CAMERA'
            ]
          },
          //成功执行的函数
          success: (res) => {
            console.log(res)
          },
          //失败执行的函数
          fail: (res) => {
            console.log(res)
          },
          //接口调用完成返回函数,不管成功还是失败都会返回
          complete: (res) => {
            console.log(res)
          }
        })
      },
      //检查所有文件访问权限
      checkAllFilesPermission() {
        module.checkAllFilesPermission({
          //成功执行的函数
          success: (res) => {
            console.log(res)
          },
          //失败执行的函数
          fail: (res) => {
            console.log(res)
          },
          //接口调用完成返回函数,不管成功还是失败都会返回
          complete: (res) => {
            console.log(res)
          }
        })
      },
      //跳转到所有文件访问权限页面
      toAllFilesPermissionPage() {
        module.toAllFilesPermissionPage({
          //成功执行的函数
          success: (res) => {
            console.log(res)
          },
          //失败执行的函数
          fail: (res) => {
            console.log(res)
          },
          //接口调用完成返回函数,不管成功还是失败都会返回
          complete: (res) => {
            console.log(res)
          }
        })
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <leven-ui-card title="API功能">
      <button type="primary" @click="requestPermissions">申请插件所需权限</button>
      <button type="primary" @click="checkAllFilesPermission">检查是否有所有文件访问权限</button>
      <button type="primary" @click="toAllFilesPermissionPage">跳转到所有文件访问权限页面</button>
      <button type="primary" @click="toPage('noPreview')">静默模式</button>
      <button type="primary" @click="toPage('preview')">预览模式</button>
    </leven-ui-card>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script setup>
  import * as module from "@/uni_modules/leven-uts-camera"
  import { LevenOptions } from "@/uni_modules/leven-uts-camera"

  //跳转页面
  function toPage(type : string) {
    switch (type) {
      case 'noPreview':
        uni.navigateTo({
          url: "/pages/camera/noPreview"
        })
        break;
      case 'preview':
        uni.navigateTo({
          url: "/pages/camera/preview"
        })
        break;
    }
  }

  //跳转到所有文件访问权限页面
  function toAllFilesPermissionPage() {
    module.toAllFilesPermissionPage({
      //成功执行的函数
      success: (res) => {
        console.log(res)
      },
      //失败执行的函数
      fail: (res) => {
        console.log(res)
      },
      //接口调用完成返回函数,不管成功还是失败都会返回
      // complete: (res) => {
      //   console.log(res)
      // }
    } as LevenOptions)
  }

  //检查是否有所有文件访问权限
  function checkAllFilesPermission() {
    module.checkAllFilesPermission({
      //成功执行的函数
      success: (res) => {
        console.log(res)
      },
      //失败执行的函数
      fail: (res) => {
        console.log(res)
      },
      //接口调用完成返回函数,不管成功还是失败都会返回
      // complete: (res) => {
      //   console.log(res)
      // }
    } as LevenOptions)
  }

  //申请插件所需权限
  function requestPermissions() {
    module.requestPermissions({
      //参数
      params: {
        permissions: [
          'android.permission.WRITE_EXTERNAL_STORAGE',
          'android.permission.READ_EXTERNAL_STORAGE',
          'android.permission.RECORD_AUDIO',
          'android.permission.CAMERA'
        ]
      },
      success: (res) => {
        console.log(res)
      },
      fail: (res) => {
        console.log(res)
      },
      //接口调用完成返回函数,不管成功还是失败都会返回
      // complete: (res) => {
      //   console.log(res)
      // }
    } as LevenOptions)
  }
</script>

<style>

</style>

组件页面

预览模式

vue
<template>
  <view>
    <view style="flex: 1; height: 300px;">
      <leven-uts-camera ref="refCamera" style="flex:1; height: 500px;" :config="config" @onError="onError"
        @onEvent="onEvent" @onEventMethod="onEventMethod">
      </leven-uts-camera>
    </view>
    <button type="primary" @click="setFlashMode">设置闪光灯模式</button>
    <button type="primary" @click="setZoom">设置焦距</button>
    <button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
    <button type="primary" @click="setExposure">设置曝光</button>
    <button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
    <button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
    <button type="primary" @click="stopPreview">关闭预览</button>
    <button type="primary" @click="startPreview">开启预览</button>
    <button type="primary" @click="switchCamera">切换摄像头</button>
    <button type="primary" @click="takePicture">拍照</button>
    <button type="primary" @click="startRecording">开始录像</button>
    <button type="primary" @click="stopRecording">结束录像</button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        config: {
          //视图的圆角值
          radius: 10,
          //图片保存目录
          // pictureDir: "",
          //视频保存目录
          // videoDir: "",
          //摄像头旋转角度
          // rotation: 0,
          //默认打开的摄像头,0:前置,1:后置
          // facing: 0,
          //闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
          flashModel: 0,
          //分辨率
          // size: [1920, 1080],
          //拍照质量,可选值:quality、latency
          // captureMode: "quality",
          //录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
          // videoQuality: "HIGHEST"
        },
        //曝光度
        exposure: 0,
        //焦距
        zoom: 1.0,
      }
    },
    methods: {
      //设置闪光点模式
      setFlashMode() {
        this.config.flashModel++;
        if (this.config.flashModel > 2) {
          this.config.flashModel = 0;
        }
        this.$refs.refCamera.setFlashMode({
          flashMode: this.config.flashModel
        });
      },
      //设置焦距
      setZoom() {
        this.zoom++;
        if (this.zoom > 8) {
          this.zoom = 1;
        }
        this.$refs.refCamera.setZoom({
          zoom: this.zoom
        });
      },
      //获取相机支持的焦距
      getZoomRange() {
        this.$refs.refCamera.getZoomRange();
      },
      //设置曝光
      setExposure() {
        this.exposure++;
        if (this.exposure > 24) {
          this.exposure = -24;
        }
        this.$refs.refCamera.setExposure({
          value: this.exposure
        });
      },
      //获取相机支持的曝光度
      getExposureRange() {
        this.$refs.refCamera.getExposureRange();
      },
      //获取相机是否支持曝光度
      isExposureSupported() {
        this.$refs.refCamera.isExposureSupported();
      },
      //结束录像
      stopRecording() {
        this.$refs.refCamera.stopRecording();
      },
      //开始录像
      startRecording() {
        this.$refs.refCamera.startRecording();
      },
      //拍照
      takePicture() {
        this.$refs.refCamera.takePicture({
          //水印
          "water": [{
            //水印内容
            "text": "这是一条测试水印",
            //文本颜色,默认:白色
            "color": "#FFFFFF",
            //文本大小,默认:20
            "textSize": 40,
            //文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
            "typeFace": "NORMAL",
            //是否使用抗锯齿功能,默认:true
            "antiAlia": true,
            //透明度(0~255),默认:128
            "alpha": 128,
            //水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
            "position": 2,
            //水印左边距,默认:40
            "leftMargin": 40,
            //水印右边距,默认:40
            "rightMargin": 40,
            //水印上边距,默认:40
            "topMargin": 40,
            //水印下边距,默认:40
            "bottomMargin": 40
          }]
        });
      },
      //切换摄像头
      switchCamera() {
        this.$refs.refCamera.switchCamera();
      },
      //开启预览
      startPreview() {
        this.$refs.refCamera.startPreview();
      },
      //关闭预览
      stopPreview() {
        this.$refs.refCamera.stopPreview();
      },
      //**********************事件***********************
      //错误事件
      onError(e) {
        console.log(e.detail)
      },
      //其他事件
      onEvent(e) {
        console.log(e.detail)
      },
      //方法事件
      onEventMethod(e) {
        // console.log(e.detail)
        let detail = e.detail;
        let type = detail.type;
        let resultData = detail.data;
        switch (type) {
          case "stopPreview":
            //关闭预览
            console.log("关闭预览:" + JSON.stringify(resultData))
            break
          case "startPreview":
            //开启预览
            console.log("开启预览:" + JSON.stringify(resultData))
            break
          case "switchCamera":
            //切换摄像头
            console.log("切换摄像头:" + JSON.stringify(resultData))
            break
          case "takePicture":
            //拍照
            console.log("拍照:" + JSON.stringify(resultData))
            break
          case "startRecording":
            //开始录像
            console.log("开始录像:" + JSON.stringify(resultData))
            break
          case "stopRecording":
            //结束录像
            console.log("结束录像:" + JSON.stringify(resultData))
            break
          case "isExposureSupported":
            //获取相机是否支持曝光度
            console.log("获取相机是否支持曝光度:" + JSON.stringify(resultData))
            break
          case "getExposureRange":
            //获取相机是否支持曝光度
            console.log("获取相机支持的曝光度:" + JSON.stringify(resultData))
            break
          case "setExposure":
            //设置曝光
            console.log("设置曝光:" + JSON.stringify(resultData))
            break
          case "getZoomRange":
            //获取相机支持的焦距
            console.log("获取相机支持的焦距:" + JSON.stringify(resultData))
            break
          case "setZoom":
            //设置焦距
            console.log("设置焦距:" + JSON.stringify(resultData))
            break
          case "setFlashMode":
            //设置闪光灯模式
            console.log("设置闪光灯模式:" + JSON.stringify(resultData))
            break
        }
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <view style="width: 750rpx; height: 500px; position: relative;">
      <leven-uts-camera ref="refLevenCamera" style="flex:1; height: 500px;" :configX="config" @onError="onError"
        @onEventMethod="onEventMethod">
      </leven-uts-camera>
    </view>
    <leven-ui-card title="组件方法">
      <button type="primary" @click="setFlashMode">设置闪光灯模式</button>
      <button type="primary" @click="setZoom">设置焦距</button>
      <button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
      <button type="primary" @click="setExposure">设置曝光</button>
      <button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
      <button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
      <button type="primary" @click="stopPreview">关闭预览</button>
      <button type="primary" @click="startPreview">开启预览</button>
      <button type="primary" @click="switchCamera">切换摄像头</button>
      <button type="primary" @click="takePicture">拍照</button>
      <button type="primary" @click="startRecording">开始录像</button>
      <button type="primary" @click="stopRecording">结束录像</button>
    </leven-ui-card>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script lang="uts" setup>
  import JSONObject from 'com.alibaba.fastjson.JSONObject'

  //组件引用
  const refLevenCamera = ref<LevenUtsCameraElement | null>(null)

  //组件初始化配置
  const config = ref({
    //视图的圆角值
    radius: 10,
    //图片保存目录
    // pictureDir: "",
    //视频保存目录
    // videoDir: "",
    //摄像头旋转角度
    // rotation: 0,
    //默认打开的摄像头,0:前置,1:后置
    // facing: 0,
    //闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
    flashModel: 0,
    //分辨率
    // size: [1920, 1080],
    //拍照质量,可选值:quality、latency
    // captureMode: "quality",
    //录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
    // videoQuality: "HIGHEST"
  })

  //曝光度
  const exposure = ref(0)
  //焦距
  const zoom = ref(1.0)

  //设置闪光点模式
  function setFlashMode() {
    let flash = config.value['flashModel'] as number;
    flash++;
    if (flash > 2) {
      flash = 0;
    }
    config.value['flashModel'] = flash;
    let options = {
      flashMode: config.value['flashModel']
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setFlashMode(params);
  }

  //设置焦距
  function setZoom() {
    zoom.value++;
    if (zoom.value > 8) {
      zoom.value = 1;
    }
    let options = {
      zoom: zoom.value
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setZoom(params);
  }

  //获取相机支持的焦距
  function getZoomRange() {
    refLevenCamera.value?.getZoomRange();
  }

  //设置曝光
  function setExposure() {
    exposure.value++;
    if (exposure.value > 24) {
      exposure.value = -24;
    }
    let options = {
      value: exposure.value
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setExposure(params);
  }

  //获取相机支持的曝光度
  function getExposureRange() {
    refLevenCamera.value?.getExposureRange();
  }

  //获取相机是否支持曝光度
  function isExposureSupported() {
    refLevenCamera.value?.isExposureSupported();
  }

  //结束录像
  function stopRecording() {
    refLevenCamera.value?.stopRecording();
  }

  //开始录像
  function startRecording() {
    refLevenCamera.value?.startRecording();
  }

  //拍照
  function takePicture() {
    let options = {
      //水印
      "water": [{
        //水印内容
        "text": "这是一条测试水印",
        //文本颜色,默认:白色
        "color": "#FFFFFF",
        //文本大小,默认:20
        "textSize": 40,
        //文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
        "typeFace": "NORMAL",
        //是否使用抗锯齿功能,默认:true
        "antiAlia": true,
        //透明度(0~255),默认:128
        "alpha": 128,
        //水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
        "position": 2,
        //水印左边距,默认:40
        "leftMargin": 40,
        //水印右边距,默认:40
        "rightMargin": 40,
        //水印上边距,默认:40
        "topMargin": 40,
        //水印下边距,默认:40
        "bottomMargin": 40
      }]
    }
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.takePicture(params);
  }

  //切换摄像头
  function switchCamera() {
    refLevenCamera.value?.switchCamera();
  }

  //开启预览
  function startPreview() {
    refLevenCamera.value?.startPreview();
  }

  //关闭预览
  function stopPreview() {
    refLevenCamera.value?.stopPreview();
  }

  //错误事件
  function onError(e : JSONObject) {
    console.log(e)
  }

  //方法事件
  function onEventMethod(e : JSONObject) {
    console.log(e)
    //类型
    let type : string = e.getString("type");
    //数据
    let data : JSONObject = e.getJSONObject("data");
    //状态
    // let code : number = data.getInteger("code");
    // //实际数据
    // let resultData : JSONObject = data.getJSONObject("data");
    // //错误消息提示
    // let message : string = data.getString("message");
    switch (type) {
      case "stopPreview":
        //关闭预览
        console.log("关闭预览:" + data.toJSONString())
        break
      case "startPreview":
        //开启预览
        console.log("开启预览:" + data.toJSONString())
        break
      case "switchCamera":
        //切换摄像头
        console.log("切换摄像头:" + data.toJSONString())
        break
      case "takePicture":
        //拍照
        console.log("拍照:" + data.toJSONString())
        break
      case "startRecording":
        //开始录像
        console.log("开始录像:" + data.toJSONString())
        break
      case "stopRecording":
        //结束录像
        console.log("结束录像:" + data.toJSONString())
        break
      case "isExposureSupported":
        //获取相机是否支持曝光度
        console.log("获取相机是否支持曝光度:" + data.toJSONString())
        break
      case "getExposureRange":
        //获取相机是否支持曝光度
        console.log("获取相机支持的曝光度:" + data.toJSONString())
        break
      case "setExposure":
        //设置曝光
        console.log("设置曝光:" + data.toJSONString())
        break
      case "getZoomRange":
        //获取相机支持的焦距
        console.log("获取相机支持的焦距:" + data.toJSONString())
        break
      case "setZoom":
        //设置焦距
        console.log("设置焦距:" + data.toJSONString())
        break
      case "setFlashMode":
        //设置闪光灯模式
        console.log("设置闪光灯模式:" + data.toJSONString())
        break
    }
  }
</script>

<style lang="scss">
  .popup-contaner {
    background-color: #FFFFFF;
    border-radius: 8px 8px 0 0;

    &-title {
      padding: 16px;
      border-bottom: 1px solid #f2f2f2;
      flex-direction: row;
      justify-content: center;
      align-items: center;
    }

    &-content {
      padding: 16px;
      max-height: 500px;
    }
  }
</style>

静默模式

vue
<template>
  <view>
    <view>
      <leven-uts-camera ref="refCamera" :config="config" @onError="onError" @onEventMethod="onEventMethod">
      </leven-uts-camera>
    </view>
    <button type="primary" @click="setFlashMode">设置闪光灯模式</button>
    <button type="primary" @click="setZoom">设置焦距</button>
    <button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
    <button type="primary" @click="setExposure">设置曝光</button>
    <button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
    <button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
    <button type="primary" @click="stopPreview">关闭预览</button>
    <button type="primary" @click="startPreview">开启预览</button>
    <button type="primary" @click="switchCamera">切换摄像头</button>
    <button type="primary" @click="takePicture">拍照</button>
    <button type="primary" @click="startRecording">开始录像</button>
    <button type="primary" @click="stopRecording">结束录像</button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        config: {
          //视图的圆角值
          radius: 10,
          //图片保存目录
          // pictureDir: "",
          //视频保存目录
          // videoDir: "",
          //摄像头旋转角度
          // rotation: 0,
          //默认打开的摄像头,0:前置,1:后置
          // facing: 0,
          //闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
          flashModel: 0,
          //分辨率
          // size: [1920, 1080],
          //拍照质量,可选值:quality、latency
          // captureMode: "quality",
          //录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
          // videoQuality: "HIGHEST",
          //静默模式
          isSilence: true
        },
        //曝光度
        exposure: 0,
        //焦距
        zoom: 1.0,
      }
    },
    methods: {
      //设置闪光点模式
      setFlashMode() {
        this.config.flashModel++;
        if (this.config.flashModel > 2) {
          this.config.flashModel = 0;
        }
        this.$refs.refCamera.setFlashMode({
          flashMode: this.config.flashModel
        });
      },
      //设置焦距
      setZoom() {
        this.zoom++;
        if (this.zoom > 8) {
          this.zoom = 1;
        }
        this.$refs.refCamera.setZoom({
          zoom: this.zoom
        });
      },
      //获取相机支持的焦距
      getZoomRange() {
        this.$refs.refCamera.getZoomRange();
      },
      //获取相机支持的曝光度
      setExposure() {
        this.exposure++;
        if (this.exposure > 24) {
          this.exposure = -24;
        }
        this.$refs.refCamera.setExposure({
          value: this.exposure
        });
      },
      //获取相机支持的曝光度
      getExposureRange() {
        this.$refs.refCamera.getExposureRange();
      },
      //获取相机是否支持曝光度
      isExposureSupported() {
        this.$refs.refCamera.isExposureSupported();
      },
      //结束录像
      stopRecording() {
        this.$refs.refCamera.stopRecording();
      },
      //开始录像
      startRecording() {
        this.$refs.refCamera.startRecording();
      },
      //拍照
      takePicture() {
        this.$refs.refCamera.takePicture({
          //水印
          "water": [{
            //水印内容
            "text": "这是一条测试水印",
            //文本颜色,默认:白色
            "color": "#FFFFFF",
            //文本大小,默认:20
            "textSize": 40,
            //文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
            "typeFace": "NORMAL",
            //是否使用抗锯齿功能,默认:true
            "antiAlia": true,
            //透明度(0~255),默认:128
            "alpha": 128,
            //水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
            "position": 2,
            //水印左边距,默认:40
            "leftMargin": 40,
            //水印右边距,默认:40
            "rightMargin": 40,
            //水印上边距,默认:40
            "topMargin": 40,
            //水印下边距,默认:40
            "bottomMargin": 40
          }]
        });
      },
      //切换摄像头
      switchCamera() {
        this.$refs.refCamera.switchCamera();
      },
      //开启预览
      startPreview() {
        this.$refs.refCamera.startPreview();
      },
      //关闭预览
      stopPreview() {
        this.$refs.refCamera.stopPreview();
      },
      //**********************事件***********************
      //错误事件
      onError(e) {
        console.log(e.detail)
      },
      //方法事件
      onEventMethod(e) {
        let detail = e.detail;
        let type = detail.type;
        let resultData = detail.data;
        switch (type) {
          case "stopPreview":
            //关闭预览
            console.log("关闭预览:" + JSON.stringify(resultData))
            break
          case "startPreview":
            //开启预览
            console.log("开启预览:" + JSON.stringify(resultData))
            break
          case "switchCamera":
            //切换摄像头
            console.log("切换摄像头:" + JSON.stringify(resultData))
            break
          case "takePicture":
            //拍照
            console.log("拍照:" + JSON.stringify(resultData))
            break
          case "startRecording":
            //开始录像
            console.log("开始录像:" + JSON.stringify(resultData))
            break
          case "stopRecording":
            //结束录像
            console.log("结束录像:" + JSON.stringify(resultData))
            break
          case "isExposureSupported":
            //获取相机是否支持曝光度
            console.log("获取相机是否支持曝光度:" + JSON.stringify(resultData))
            break
          case "getExposureRange":
            //获取相机是否支持曝光度
            console.log("获取相机支持的曝光度:" + JSON.stringify(resultData))
            break
          case "setExposure":
            //设置曝光
            console.log("设置曝光:" + JSON.stringify(resultData))
            break
          case "getZoomRange":
            //获取相机支持的焦距
            console.log("获取相机支持的焦距:" + JSON.stringify(resultData))
            break
          case "setZoom":
            //设置焦距
            console.log("设置焦距:" + JSON.stringify(resultData))
            break
          case "setFlashMode":
            //设置闪光灯模式
            console.log("设置闪光灯模式:" + JSON.stringify(resultData))
            break
        }
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <leven-uts-camera ref="refLevenCamera" style="width: 0px; height: 0px;" :configX="config" @onError="onError"
      @onEventMethod="onEventMethod">
    </leven-uts-camera>
    <leven-ui-card title="组件方法">
      <button type="primary" @click="setFlashMode">设置闪光灯模式</button>
      <button type="primary" @click="setZoom">设置焦距</button>
      <button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
      <button type="primary" @click="setExposure">设置曝光</button>
      <button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
      <button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
      <button type="primary" @click="stopPreview">关闭预览</button>
      <button type="primary" @click="startPreview">开启预览</button>
      <button type="primary" @click="switchCamera">切换摄像头</button>
      <button type="primary" @click="takePicture">拍照</button>
      <button type="primary" @click="startRecording">开始录像</button>
      <button type="primary" @click="stopRecording">结束录像</button>
    </leven-ui-card>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script lang="uts" setup>
  import JSONObject from 'com.alibaba.fastjson.JSONObject'

  //组件引用
  const refLevenCamera = ref<LevenUtsCameraElement | null>(null)

  //组件初始化配置
  const config = ref({
    //视图的圆角值
    radius: 10,
    //图片保存目录
    // pictureDir: "",
    //视频保存目录
    // videoDir: "",
    //摄像头旋转角度
    // rotation: 0,
    //默认打开的摄像头,0:前置,1:后置
    // facing: 0,
    //闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
    flashModel: 0,
    //分辨率
    // size: [1920, 1080],
    //拍照质量,可选值:quality、latency
    // captureMode: "quality",
    //录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
    // videoQuality: "HIGHEST",
    //静默模式
    isSilence: true
  })

  //曝光度
  const exposure = ref(0)
  //焦距
  const zoom = ref(1.0)

  //设置闪光点模式
  function setFlashMode() {
    let flash = config.value['flashModel'] as number;
    flash++;
    if (flash > 2) {
      flash = 0;
    }
    config.value['flashModel'] = flash;
    let options = {
      flashMode: config.value['flashModel']
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setFlashMode(params);
  }

  //设置焦距
  function setZoom() {
    zoom.value++;
    if (zoom.value > 8) {
      zoom.value = 1;
    }
    let options = {
      zoom: zoom.value
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setZoom(params);
  }

  //获取相机支持的焦距
  function getZoomRange() {
    refLevenCamera.value?.getZoomRange();
  }

  //设置曝光
  function setExposure() {
    exposure.value++;
    if (exposure.value > 24) {
      exposure.value = -24;
    }
    let options = {
      value: exposure.value
    };
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.setExposure(params);
  }

  //获取相机支持的曝光度
  function getExposureRange() {
    refLevenCamera.value?.getExposureRange();
  }

  //获取相机是否支持曝光度
  function isExposureSupported() {
    refLevenCamera.value?.isExposureSupported();
  }

  //结束录像
  function stopRecording() {
    refLevenCamera.value?.stopRecording();
  }

  //开始录像
  function startRecording() {
    refLevenCamera.value?.startRecording();
  }

  //拍照
  function takePicture() {
    let options = {
      //水印
      "water": [{
        //水印内容
        "text": "这是一条测试水印",
        //文本颜色,默认:白色
        "color": "#FFFFFF",
        //文本大小,默认:20
        "textSize": 40,
        //文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
        "typeFace": "NORMAL",
        //是否使用抗锯齿功能,默认:true
        "antiAlia": true,
        //透明度(0~255),默认:128
        "alpha": 128,
        //水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
        "position": 2,
        //水印左边距,默认:40
        "leftMargin": 40,
        //水印右边距,默认:40
        "rightMargin": 40,
        //水印上边距,默认:40
        "topMargin": 40,
        //水印下边距,默认:40
        "bottomMargin": 40
      }]
    }
    let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
    refLevenCamera.value?.takePicture(params);
  }

  //切换摄像头
  function switchCamera() {
    refLevenCamera.value?.switchCamera();
  }

  //开启预览
  function startPreview() {
    refLevenCamera.value?.startPreview();
  }

  //关闭预览
  function stopPreview() {
    refLevenCamera.value?.stopPreview();
  }

  //错误事件
  function onError(e : JSONObject) {
    console.log(e)
  }

  //方法事件
  function onEventMethod(e : JSONObject) {
    // console.log(e)
    //类型
    let type : string = e.getString("type");
    //数据
    let data : JSONObject = e.getJSONObject("data");
    //状态
    // let code : number = data.getInteger("code");
    // //实际数据
    // let resultData : JSONObject = data.getJSONObject("data");
    // //错误消息提示
    // let message : string = data.getString("message");
    switch (type) {
      case "stopPreview":
        //关闭预览
        console.log("关闭预览:" + data.toJSONString())
        break
      case "startPreview":
        //开启预览
        console.log("开启预览:" + data.toJSONString())
        break
      case "switchCamera":
        //切换摄像头
        console.log("切换摄像头:" + data.toJSONString())
        break
      case "takePicture":
        //拍照
        console.log("拍照:" + data.toJSONString())
        break
      case "startRecording":
        //开始录像
        console.log("开始录像:" + data.toJSONString())
        break
      case "stopRecording":
        //结束录像
        console.log("结束录像:" + data.toJSONString())
        break
      case "isExposureSupported":
        //获取相机是否支持曝光度
        console.log("获取相机是否支持曝光度:" + data.toJSONString())
        break
      case "getExposureRange":
        //获取相机是否支持曝光度
        console.log("获取相机支持的曝光度:" + data.toJSONString())
        break
      case "setExposure":
        //设置曝光
        console.log("设置曝光:" + data.toJSONString())
        break
      case "getZoomRange":
        //获取相机支持的焦距
        console.log("获取相机支持的焦距:" + data.toJSONString())
        break
      case "setZoom":
        //设置焦距
        console.log("设置焦距:" + data.toJSONString())
        break
      case "setFlashMode":
        //设置闪光灯模式
        console.log("设置闪光灯模式:" + data.toJSONString())
        break
    }
  }
</script>

<style lang="scss">
  .popup-contaner {
    background-color: #FFFFFF;
    border-radius: 8px 8px 0 0;

    &-title {
      padding: 16px;
      border-bottom: 1px solid #f2f2f2;
      flex-direction: row;
      justify-content: center;
      align-items: center;
    }

    &-content {
      padding: 16px;
      max-height: 500px;
    }
  }
</style>