save code
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
## 1.1.1(2025-10-15)
|
||||||
|
修复监听持续返回事件问题。
|
||||||
|
## 1.1.0(2024-10-13)
|
||||||
|
修改AndroidManifest.xml下的包名。
|
||||||
|
## 1.0.9(2024-10-12)
|
||||||
|
删除takePhoto下的takeMode参数逻辑
|
||||||
|
## 1.0.8(2024-10-10)
|
||||||
|
兼容处理uniapp无法切换相机和拍照的问题。
|
||||||
|
## 1.0.7(2024-10-09)
|
||||||
|
修复uniapp环境下不能正常使用插件问题。
|
||||||
|
## 1.0.6(2024-09-13)
|
||||||
|
去掉插件内部权限申请逻辑。
|
||||||
|
## 1.0.5(2024-08-10)
|
||||||
|
修复Android不能正常录像的问题。
|
||||||
|
## 1.0.4(2024-08-08)
|
||||||
|
修复iOS默认相机设置不生效的问题
|
||||||
|
## 1.0.3(2024-08-06)
|
||||||
|
修改iOS拍照接口默认质量为原图。
|
||||||
|
## 1.0.2(2024-07-22)
|
||||||
|
修复iOS编译问题。
|
||||||
|
## 1.0.1(2024-07-04)
|
||||||
|
修复一些bug。
|
||||||
|
## 1.0.0(2024-07-04)
|
||||||
|
初始化发布
|
||||||
Binary file not shown.
@@ -0,0 +1,114 @@
|
|||||||
|
{
|
||||||
|
"id": "XF-cameraUTS",
|
||||||
|
"displayName": "UTS实现自定义相机拍照和录像功能",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"description": "XF-cameraUTS封装了Android和iOS自定义相机预览的功能。",
|
||||||
|
"keywords": [
|
||||||
|
"相机",
|
||||||
|
"录像",
|
||||||
|
"拍照"
|
||||||
|
],
|
||||||
|
"repository": "",
|
||||||
|
"engines": {
|
||||||
|
"HBuilderX": "^3.7.0",
|
||||||
|
"uni-app": "^4.74",
|
||||||
|
"uni-app-x": "^4.74"
|
||||||
|
},
|
||||||
|
"dcloudext": {
|
||||||
|
"type": "component-uts",
|
||||||
|
"sale": {
|
||||||
|
"regular": {
|
||||||
|
"price": "168.00"
|
||||||
|
},
|
||||||
|
"sourcecode": {
|
||||||
|
"price": "0.00"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"qq": ""
|
||||||
|
},
|
||||||
|
"declaration": {
|
||||||
|
"ads": "无",
|
||||||
|
"data": "无",
|
||||||
|
"permissions": "android.permission.CAMERA\nandroid.permission.RECORD_AUDIO\nandroid.permission.WRITE_EXTERNAL_STORAGE\nandroid.permission.READ_EXTERNAL_STORAGE\nPrivacy - Camera Usage Description"
|
||||||
|
},
|
||||||
|
"npmurl": "",
|
||||||
|
"darkmode": "x",
|
||||||
|
"i18n": "x",
|
||||||
|
"widescreen": "x"
|
||||||
|
},
|
||||||
|
"uni_modules": {
|
||||||
|
"dependencies": [],
|
||||||
|
"encrypt": [],
|
||||||
|
"platforms": {
|
||||||
|
"cloud": {
|
||||||
|
"tcb": "√",
|
||||||
|
"aliyun": "√",
|
||||||
|
"alipay": "√"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"uni-app": {
|
||||||
|
"vue": {
|
||||||
|
"vue2": "x",
|
||||||
|
"vue3": "x"
|
||||||
|
},
|
||||||
|
"web": {
|
||||||
|
"safari": "x",
|
||||||
|
"chrome": "x"
|
||||||
|
},
|
||||||
|
"app": {
|
||||||
|
"vue": "x",
|
||||||
|
"nvue": {
|
||||||
|
"extVersion": "1.0.1",
|
||||||
|
"minVersion": ""
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"extVersion": "1.0.1",
|
||||||
|
"minVersion": "21"
|
||||||
|
},
|
||||||
|
"ios": {
|
||||||
|
"extVersion": "1.0.1",
|
||||||
|
"minVersion": "12"
|
||||||
|
},
|
||||||
|
"harmony": "x"
|
||||||
|
},
|
||||||
|
"mp": {
|
||||||
|
"weixin": "x",
|
||||||
|
"alipay": "x",
|
||||||
|
"toutiao": "x",
|
||||||
|
"baidu": "x",
|
||||||
|
"kuaishou": "x",
|
||||||
|
"jd": "x",
|
||||||
|
"harmony": "x",
|
||||||
|
"qq": "x",
|
||||||
|
"lark": "x"
|
||||||
|
},
|
||||||
|
"quickapp": {
|
||||||
|
"huawei": "x",
|
||||||
|
"union": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uni-app-x": {
|
||||||
|
"web": {
|
||||||
|
"safari": "x",
|
||||||
|
"chrome": "x"
|
||||||
|
},
|
||||||
|
"app": {
|
||||||
|
"android": {
|
||||||
|
"extVersion": "1.0.1",
|
||||||
|
"minVersion": "21"
|
||||||
|
},
|
||||||
|
"ios": {
|
||||||
|
"extVersion": "1.0.1",
|
||||||
|
"minVersion": "12"
|
||||||
|
},
|
||||||
|
"harmony": "x"
|
||||||
|
},
|
||||||
|
"mp": {
|
||||||
|
"weixin": "x"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,183 @@
|
|||||||
|
# **概述**
|
||||||
|
|
||||||
|
XF-cameraUTS封装了Android和iOS自定义相机预览的功能。
|
||||||
|
|
||||||
|
## **模块调用**
|
||||||
|
|
||||||
|
```js
|
||||||
|
<xf-camera style="height:750rpx; background-color: red;" @ready="ready" @error="onError" @stop="stop" :flash="flash" :position="device">
|
||||||
|
</xf-camera>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 参数说明:
|
||||||
|
|
||||||
|
position:
|
||||||
|
|
||||||
|
- 类型:字符串型
|
||||||
|
- 描述:(可选项)前置或者后置相机。(front前置 |back 后置)
|
||||||
|
|
||||||
|
flash:
|
||||||
|
|
||||||
|
- 类型:字符串型
|
||||||
|
- 描述:(可选项)是否开启闪光灯。( auto, on, off, torch)
|
||||||
|
|
||||||
|
|
||||||
|
## **插件接口**
|
||||||
|
|
||||||
|
<div id="a0"></div>
|
||||||
|
|
||||||
|
# **takePhoto**
|
||||||
|
|
||||||
|
拍照
|
||||||
|
|
||||||
|
## uni-app项目中(nvue)调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { takePhoto } from "@/uni_modules/XF-cameraUTS"
|
||||||
|
|
||||||
|
takePhoto({
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## uni-app x项目(uvue)中调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { takePhoto } from "@/uni_modules/XF-cameraUTS";
|
||||||
|
import { TakePhotoOption, TakePhotoSuccessCallbackResult } from "@/uni_modules/XF-cameraUTS/utssdk/interface.uts";
|
||||||
|
|
||||||
|
let options = {
|
||||||
|
success: (res : TakePhotoSuccessCallbackResult) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
} as TakePhotoOption;
|
||||||
|
takePhoto(options);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可用性
|
||||||
|
|
||||||
|
iOS、Android系统
|
||||||
|
|
||||||
|
可提供的1.0.0及更高版本
|
||||||
|
|
||||||
|
|
||||||
|
<div id="a1"></div>
|
||||||
|
|
||||||
|
# **startRecord**
|
||||||
|
|
||||||
|
开始录像
|
||||||
|
|
||||||
|
## uni-app项目中(nvue)调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { startRecord } from "@/uni_modules/XF-cameraUTS"
|
||||||
|
|
||||||
|
startRecord({
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## uni-app x项目(uvue)中调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { startRecord } from "@/uni_modules/XF-cameraUTS";
|
||||||
|
import { CameraContextStartRecordOption, GeneralCallbackResult } from "@/uni_modules/XF-cameraUTS/utssdk/interface.uts";
|
||||||
|
|
||||||
|
let options = {
|
||||||
|
success: (res : GeneralCallbackResult) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
} as CameraContextStartRecordOption;
|
||||||
|
startRecord(options);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可用性
|
||||||
|
|
||||||
|
iOS、Android系统
|
||||||
|
|
||||||
|
可提供的1.0.0及更高版本
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="a2"></div>
|
||||||
|
|
||||||
|
# **stopRecord**
|
||||||
|
|
||||||
|
停止录像
|
||||||
|
|
||||||
|
## uni-app项目中(nvue)调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { stopRecord } from "@/uni_modules/XF-cameraUTS"
|
||||||
|
|
||||||
|
stopRecord({
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## uni-app x项目(uvue)中调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { stopRecord } from "@/uni_modules/XF-cameraUTS";
|
||||||
|
import { CameraContextStopRecordOption, StopRecordSuccessCallbackResult } from "@/uni_modules/XF-cameraUTS/utssdk/interface.uts";
|
||||||
|
|
||||||
|
let options = {
|
||||||
|
success: (res : StopRecordSuccessCallbackResult) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
} as CameraContextStopRecordOption;
|
||||||
|
stopRecord(options);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可用性
|
||||||
|
|
||||||
|
iOS、Android系统
|
||||||
|
|
||||||
|
可提供的1.0.0及更高版本
|
||||||
|
|
||||||
|
|
||||||
|
<div id="a3"></div>
|
||||||
|
|
||||||
|
# **switchCamera**
|
||||||
|
|
||||||
|
切换相机
|
||||||
|
|
||||||
|
## uni-app项目中(nvue)调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { switchCamera } from "@/uni_modules/XF-cameraUTS"
|
||||||
|
|
||||||
|
switchCamera({
|
||||||
|
position: 'back',
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## uni-app x项目(uvue)中调用示例:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { switchCamera } from "@/uni_modules/XF-cameraUTS";
|
||||||
|
import { SwitchOption, GeneralCallbackResult } from "@/uni_modules/XF-cameraUTS/utssdk/interface.uts";
|
||||||
|
|
||||||
|
let options = {
|
||||||
|
position: 'back',
|
||||||
|
success: (res : GeneralCallbackResult) => {
|
||||||
|
console.log(res)
|
||||||
|
}
|
||||||
|
} as SwitchOption;
|
||||||
|
switchCamera(options);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 可用性
|
||||||
|
|
||||||
|
iOS、Android系统
|
||||||
|
|
||||||
|
可提供的1.0.8及更高版本
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="uts.sdk.modules.XFCameraUTS">
|
||||||
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-feature android:name="android.hardware.camera" android:required="true" />
|
||||||
|
<uses-feature android:name="android.hardware.camera.any" />
|
||||||
|
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
|
||||||
|
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
|
||||||
|
<uses-feature android:name="android.hardware.microphone" android:required="true" />
|
||||||
|
<application android:requestLegacyExternalStorage="true">
|
||||||
|
<meta-data android:name="ScopedStorage" android:value="true" />
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"minSdkVersion": "19",
|
||||||
|
"dependencies": [
|
||||||
|
// 使用camera2实现的CameraX核心库
|
||||||
|
// 定义camerax_version为"1.4.0-alpha04"
|
||||||
|
// 下面的行是可选的,因为core库通过camera-camera2间接包含
|
||||||
|
"androidx.camera:camera-core:1.4.0-alpha04"
|
||||||
|
"androidx.camera:camera-camera2:1.4.0-alpha04"
|
||||||
|
// 如果你想要额外使用CameraX生命周期库
|
||||||
|
"androidx.camera:camera-lifecycle:1.4.0-alpha04"
|
||||||
|
// 如果你想要额外使用CameraX视频捕获库
|
||||||
|
"androidx.camera:camera-video:1.4.0-alpha04"
|
||||||
|
// 如果你想要额外使用CameraX视图类
|
||||||
|
"androidx.camera:camera-view:1.4.0-alpha04"
|
||||||
|
// 如果你想要额外添加CameraX ML Kit Vision集成
|
||||||
|
// "androidx.camera:camera-mlkit-vision:1.4.0-alpha04"
|
||||||
|
// 如果你想要额外使用CameraX扩展库
|
||||||
|
// "androidx.camera:camera-extensions:1.4.0-alpha04"
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,152 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="uts">
|
||||||
|
import { CameraView } from './camera';
|
||||||
|
import { CameraConfig } from '../interface'
|
||||||
|
import { CameraManager } from './CameraManager';
|
||||||
|
|
||||||
|
//原生提供以下属性或方法的实现
|
||||||
|
export default {
|
||||||
|
/**
|
||||||
|
* 组件名称,也就是开发者使用的标签
|
||||||
|
*/
|
||||||
|
name: "xf-camera",
|
||||||
|
/**
|
||||||
|
* 组件涉及的事件声明,只有声明过的事件,才能被正常发送
|
||||||
|
*/
|
||||||
|
emits: ['stop', 'error', 'ready'],
|
||||||
|
/**
|
||||||
|
* 属性声明,组件的使用者会传递这些属性值到组件
|
||||||
|
*/
|
||||||
|
props: {
|
||||||
|
"mode": {
|
||||||
|
type: String,
|
||||||
|
default: "normal"
|
||||||
|
},
|
||||||
|
"resolution": {
|
||||||
|
type: String,
|
||||||
|
default: "medium" // low | high
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
type: String,
|
||||||
|
default: "back" // front前置 |back 后置
|
||||||
|
},
|
||||||
|
"flash": {
|
||||||
|
type: String,
|
||||||
|
default: "auto" // auto, on, off, torch
|
||||||
|
},
|
||||||
|
"frameSize": {
|
||||||
|
type: String,
|
||||||
|
default: "medium" // small|large
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 组件内部变量声明
|
||||||
|
*/
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 属性变化监听器实现
|
||||||
|
*/
|
||||||
|
watch: {
|
||||||
|
"position": {
|
||||||
|
/**
|
||||||
|
* 这里监听属性变化,并进行组件内部更新
|
||||||
|
*/
|
||||||
|
handler(newValue : string, _ : string) {
|
||||||
|
this.$el?.switchCamera(newValue)
|
||||||
|
},
|
||||||
|
immediate: false // 创建时是否通过此方法更新属性,默认值为false
|
||||||
|
},
|
||||||
|
"flash": {
|
||||||
|
/**
|
||||||
|
* 这里监听属性变化,并进行组件内部更新
|
||||||
|
*/
|
||||||
|
handler(newValue : string, _ : string) {
|
||||||
|
this.$el?.setFlash(newValue)
|
||||||
|
},
|
||||||
|
immediate: false // 创建时是否通过此方法更新属性,默认值为false
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 规则:如果没有配置expose,则methods中的方法均对外暴露,如果配置了expose,则以expose的配置为准向外暴露
|
||||||
|
* ['publicMethod'] 含义为:只有 `publicMethod` 在实例上可用
|
||||||
|
*/
|
||||||
|
expose: [],
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 组件被创建,组件第一个生命周期,
|
||||||
|
* 在内存中被占用的时候被调用,开发者可以在这里执行一些需要提前执行的初始化逻辑
|
||||||
|
*/
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 对应平台的view载体即将被创建,对应前端beforeMount
|
||||||
|
*/
|
||||||
|
NVBeforeLoad() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [必须实现] 创建原生View,必须定义返回值类型
|
||||||
|
* 开发者需要重点实现这个函数,声明原生组件被创建出来的过程,以及最终生成的原生组件类型
|
||||||
|
* (Android需要明确知道View类型,需特殊校验)
|
||||||
|
*/
|
||||||
|
NVLoad() : CameraView {
|
||||||
|
let previewView = new CameraView(this.$androidContext!, this)
|
||||||
|
previewView.setTag("9527");
|
||||||
|
CameraManager.getInstance().setCameraView(previewView);
|
||||||
|
return previewView
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 原生View已创建
|
||||||
|
*/
|
||||||
|
NVLoaded() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 原生View布局完成
|
||||||
|
*/
|
||||||
|
NVLayouted() {
|
||||||
|
this.$el?.setConfig({
|
||||||
|
resolution: this.resolution,
|
||||||
|
frameSize: this.frameSize,
|
||||||
|
flash: this.flash
|
||||||
|
} as CameraConfig)
|
||||||
|
this.$el?.switchCamera(this.position)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 原生View将释放
|
||||||
|
*/
|
||||||
|
NVBeforeUnload() {
|
||||||
|
let ret : Map<string, any> = new Map();
|
||||||
|
this.$emit('stop', ret)
|
||||||
|
|
||||||
|
this.$el?.unbindCamera()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 原生View已释放,这里可以做释放View之后的操作
|
||||||
|
*/
|
||||||
|
NVUnloaded() {
|
||||||
|
CameraManager.getInstance().dispose();
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* [可选实现] 组件销毁
|
||||||
|
*/
|
||||||
|
unmounted() {
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"deploymentTarget": "11"
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,167 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script lang="uts">
|
||||||
|
import { UIView } from "UIKit"
|
||||||
|
import { CameraView } from "./camera";
|
||||||
|
import { CameraConfig } from '../interface'
|
||||||
|
import { CameraManager } from "./CameraManager";
|
||||||
|
|
||||||
|
//原生提供以下属性或方法的实现
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
};
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 组件名称,也就是开发者使用的标签
|
||||||
|
*/
|
||||||
|
name: "xf-camera",
|
||||||
|
/**
|
||||||
|
* 组件涉及的事件声明,只有声明过的事件,才能被正常发送
|
||||||
|
*/
|
||||||
|
emits: ['stop', 'error', 'ready'],
|
||||||
|
/**
|
||||||
|
* 属性声明,组件的使用者会传递这些属性值到组件
|
||||||
|
*/
|
||||||
|
props: {
|
||||||
|
"mode": {
|
||||||
|
type: String,
|
||||||
|
default: "normal"
|
||||||
|
},
|
||||||
|
"resolution": {
|
||||||
|
type: String,
|
||||||
|
default: "medium" // low | high
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
type: String,
|
||||||
|
default: "back" // front前置 |back 后置
|
||||||
|
},
|
||||||
|
"flash": {
|
||||||
|
type: String,
|
||||||
|
default: "auto" // auto, on, off, torch
|
||||||
|
},
|
||||||
|
"frameSize": {
|
||||||
|
type: String,
|
||||||
|
default: "medium" // small|large
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 属性变化监听器实现
|
||||||
|
*/
|
||||||
|
watch: {
|
||||||
|
"position": {
|
||||||
|
/**
|
||||||
|
* 这里监听属性变化,并进行组件内部更新
|
||||||
|
*/
|
||||||
|
handler(newValue : String, _oldValue : String) {
|
||||||
|
CameraManager.getInstance().getCameraView()?.switchCamera(newValue)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 创建时是否通过此方法更新属性,默认值为false
|
||||||
|
*/
|
||||||
|
immediate: false
|
||||||
|
},
|
||||||
|
"flash": {
|
||||||
|
/**
|
||||||
|
* 这里监听属性变化,并进行组件内部更新
|
||||||
|
*/
|
||||||
|
handler(newValue : String, _oldValue : String) {
|
||||||
|
CameraManager.getInstance().getCameraView()?.setFlash(newValue)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 创建时是否通过此方法更新属性,默认值为false
|
||||||
|
*/
|
||||||
|
immediate: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 规则:如果没有配置expose,则methods中的方法均对外暴露,如果配置了expose,则以expose的配置为准向外暴露
|
||||||
|
* ['publicMethod'] 含义为:只有 `publicMethod` 在实例上可用
|
||||||
|
*/
|
||||||
|
expose: [],
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组件被创建,组件第一个生命周期,
|
||||||
|
* 在内存中被占用的时候被调用,开发者可以在这里执行一些需要提前执行的初始化逻辑
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
created() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 对应平台的view载体即将被创建,对应前端beforeMount
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
NVBeforeLoad() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 创建原生View,必须定义返回值类型
|
||||||
|
* 开发者需要重点实现这个函数,声明原生组件被创建出来的过程,以及最终生成的原生组件类型
|
||||||
|
* [必须实现]
|
||||||
|
*/
|
||||||
|
NVLoad() : UIView {
|
||||||
|
let previewView = new UIView()
|
||||||
|
previewView.tag = 9527
|
||||||
|
return previewView
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原生View已创建
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
NVLoaded() {
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 原生View布局完成
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
NVLayouted() {
|
||||||
|
let previewView = this.$el as UIView;
|
||||||
|
let cameraView = new CameraView(previewView, this, {
|
||||||
|
resolution: this.resolution,
|
||||||
|
frameSize: this.frameSize,
|
||||||
|
devicePosition: this.position,
|
||||||
|
flash: this.flash
|
||||||
|
} as CameraConfig)
|
||||||
|
CameraManager.getInstance().setCameraView(cameraView);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 原生View将释放
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
NVBeforeUnload() {
|
||||||
|
let ret : Map<string, any> = new Map();
|
||||||
|
let detail : Map<string, any> = new Map();
|
||||||
|
detail.set("detail", ret)
|
||||||
|
this.$emit("stop", detail);
|
||||||
|
|
||||||
|
CameraManager.getInstance().getCameraView()?.unbindCamera()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 原生View已释放,这里可以做释放View之后的操作
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
NVUnloaded() {
|
||||||
|
CameraManager.getInstance().dispose()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 组件销毁
|
||||||
|
* [可选实现]
|
||||||
|
*/
|
||||||
|
unmounted() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,214 @@
|
|||||||
|
export type GeneralCallbackResult = {
|
||||||
|
/** 错误信息 */
|
||||||
|
errMsg : string
|
||||||
|
}
|
||||||
|
export type TakePhotoSuccessCallbackResult = {
|
||||||
|
/** 照片文件的临时路径 (本地路径),安卓是jpg图片格式,ios是png */
|
||||||
|
tempImagePath : string
|
||||||
|
quality : string
|
||||||
|
errMsg : string
|
||||||
|
}
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type TakePhotoFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type TakePhotoSuccessCallback = (
|
||||||
|
result : TakePhotoSuccessCallbackResult
|
||||||
|
) => void
|
||||||
|
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type TakePhotoCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
|
||||||
|
export type TakePhotoOption = {
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: TakePhotoCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: TakePhotoFailCallback
|
||||||
|
/** 成像质量
|
||||||
|
*
|
||||||
|
* 可选值:
|
||||||
|
* - 'high': 高质量;
|
||||||
|
* - 'normal': 普通质量;
|
||||||
|
* - 'low': 低质量;
|
||||||
|
* - 'original': 原图; */
|
||||||
|
quality ?: 'high' | 'normal' | 'low' | 'original'
|
||||||
|
/**
|
||||||
|
* 是否开启镜像 */
|
||||||
|
selfieMirror ?: boolean
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: TakePhotoSuccessCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type SetZoomSuccessCallbackResult = {
|
||||||
|
/** 实际设置的缩放级别。由于系统限制,某些机型可能无法设置成指定值,会改用最接近的可设值。 */
|
||||||
|
zoom : number
|
||||||
|
errMsg : string
|
||||||
|
}
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type SetZoomCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type SetZoomFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type CameraContextSetZoomSuccessCallback = (
|
||||||
|
result : SetZoomSuccessCallbackResult
|
||||||
|
) => void
|
||||||
|
|
||||||
|
export type CameraContextSetZoomOption = {
|
||||||
|
/** 缩放级别,范围[1, maxZoom]。zoom 可取小数,精确到小数后一位。maxZoom 可在 bindinitdone 返回值中获取。 */
|
||||||
|
zoom : number
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: SetZoomCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: SetZoomFailCallback
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: CameraContextSetZoomSuccessCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StartRecordTimeoutCallbackResult = {
|
||||||
|
/** 视频的文件的临时路径 (本地路径) */
|
||||||
|
tempVideoPath : string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type StartRecordCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type StartRecordFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */
|
||||||
|
export type StartRecordTimeoutCallback = (
|
||||||
|
result : StartRecordTimeoutCallbackResult
|
||||||
|
) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type CameraContextStartRecordSuccessCallback = (
|
||||||
|
res : GeneralCallbackResult
|
||||||
|
) => void
|
||||||
|
export type CameraContextStartRecordOption = {
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: StartRecordCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: StartRecordFailCallback
|
||||||
|
/**
|
||||||
|
* 是否开启镜像 */
|
||||||
|
selfieMirror ?: boolean
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: CameraContextStartRecordSuccessCallback
|
||||||
|
/**
|
||||||
|
* 录制时长上限,单位为秒,最长不能超过 5 分钟 */
|
||||||
|
timeout ?: number
|
||||||
|
/** 超过录制时长上限时会结束录像并触发此回调,录像异常退出时也会触发此回调 */
|
||||||
|
timeoutCallback ?: StartRecordTimeoutCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
export type StopRecordSuccessCallbackResult = {
|
||||||
|
/** 视频的文件的临时路径 (本地路径) */
|
||||||
|
tempVideoPath : string
|
||||||
|
errMsg : string
|
||||||
|
}
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type StopRecordCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type StopRecordFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type CameraContextStopRecordSuccessCallback = (
|
||||||
|
result : StopRecordSuccessCallbackResult
|
||||||
|
) => void
|
||||||
|
export type CameraContextStopRecordOption = {
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: StopRecordCompleteCallback
|
||||||
|
/** 启动视频压缩,压缩效果同`chooseVideo` */
|
||||||
|
compressed ?: boolean
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: StopRecordFailCallback
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: CameraContextStopRecordSuccessCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 回调函数 */
|
||||||
|
export type OnCameraFrameCallback = (result : OnCameraFrameCallbackResult) => void
|
||||||
|
export type OnCameraFrameCallbackResult = {
|
||||||
|
/** 图像像素点数据,一维数组,每四项表示一个像素点的 rgba */
|
||||||
|
data : any
|
||||||
|
/** 图像数据矩形的高度 */
|
||||||
|
height : number
|
||||||
|
/** 图像数据矩形的宽度 */
|
||||||
|
width : number
|
||||||
|
}
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type StartSuccessCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
type StartFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
type StartCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
export type CameraFrameListenerStartOption = {
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: StartCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: StartFailCallback
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: StartSuccessCallback
|
||||||
|
/** [Worker](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.html)
|
||||||
|
*
|
||||||
|
* 可选参数。如果需要在 iOS ExperimentalWorker 内监听摄像头帧数据,则需要传入对应 Worker 对象。详情 [Worker.getCameraFrameData](https://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.getCameraFrameData.html) */
|
||||||
|
// worker ?: Worker
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type StopCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type StopFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type StopSuccessCallback = (res : GeneralCallbackResult) => void
|
||||||
|
export type StopOption = {
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: StopCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: StopFailCallback
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: StopSuccessCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
export type FlashMode = 'auto' | 'on' | 'off' | 'torch'
|
||||||
|
export type DevicePosition = 'back' | 'front'
|
||||||
|
export type Resolution = 'low' | 'medium' | 'high'
|
||||||
|
export type FrameSize = 'medium' | 'small' | 'large'
|
||||||
|
export type QualityType = 'high' | 'normal' | 'low' | 'original'
|
||||||
|
|
||||||
|
|
||||||
|
export type CameraConfig = {
|
||||||
|
flash ?: FlashMode
|
||||||
|
devicePosition ?: DevicePosition
|
||||||
|
resolution ?: Resolution
|
||||||
|
frameSize ?: FrameSize
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
export type SwitchCompleteCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
export type SwitchFailCallback = (res : GeneralCallbackResult) => void
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
export type SwitchSuccessCallback = (res : GeneralCallbackResult) => void
|
||||||
|
export type SwitchOption = {
|
||||||
|
position : DevicePosition
|
||||||
|
/** 接口调用结束的回调函数(调用成功、失败都会执行) */
|
||||||
|
complete ?: SwitchCompleteCallback
|
||||||
|
/** 接口调用失败的回调函数 */
|
||||||
|
fail ?: SwitchFailCallback
|
||||||
|
/** 接口调用成功的回调函数 */
|
||||||
|
success ?: SwitchSuccessCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
export type OnCameraFrameListenerOption = {
|
||||||
|
success ?: OnCameraFrameCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TakePhoto = (options : TakePhotoOption) => void
|
||||||
|
export type SetZoom = (options : CameraContextSetZoomOption) => void
|
||||||
|
export type StartRecord = (options : CameraContextStartRecordOption) => void
|
||||||
|
export type StopRecord = (options : CameraContextStopRecordOption) => void
|
||||||
|
export type OnCameraFrameListener = (options : OnCameraFrameListenerOption) => void
|
||||||
|
export type StartCameraFrame = (options : CameraFrameListenerStartOption) => void
|
||||||
|
export type StopCameraFrame = (options : StopOption) => void
|
||||||
|
export type SwitchCamera = (options : SwitchOption) => void
|
||||||
Reference in New Issue
Block a user