更新记录

1.0.1(2023-08-07)

  • 添加初始设置前后摄像头

1.0.0(2023-06-20)

  • 初始版

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


特别提醒

  • 购买本插件前,请先试用,并充分自测确认满足需求之后再行购买。虚拟物品一旦购买之后无法退款;
  • 如有使用上的疑问、bug,可以QQ群(345533496)反馈;
  • 请在合法范围内使用,若使用本插件做非法开发,本方概不负责;

使用方法

<ly-noPreviewCapture ref="noPriviewCapture" style="width: 1rpx;height: 1rpx;background-color: blue;" mode="PICTURE"></ly-noPreviewCapture>

说明:无预览拍照width与height不能设为0,(宽高都设为0会全屏显示预览)设置为1rpx,需要预览抓拍可自行设置width与height。mode可设为VIDEO:视频录制 PICTURE:拍照(默认)。

//需在onShow中调用openCameraView(),否则从下个页面回到当前页面无法继续拍照或录制
onShow() {
    if(this.firstOnShow){
        if(this.$refs.noPriviewCapture){
            this.$refs.noPriviewCapture.openCameraView();
        }
        this.firstOnShow = false;
    }
},
onHide() {
   this.$refs.noPriviewCapture.closeCamera();
   this.firstOnShow = true;
},
  • 拍照
// 抓拍图片存放路径
var path = plus.io.convertLocalFileSystemURL("_doc/NoPriviewCapture");
let time = new Date().getTime();
var name = time + ".jpg"
let dic = {
    filePath: path,
    fileName: name
}
this.$refs.noPriviewCapture.takePicture(dic, res => {
    if (res.code == 200) {
        this.resultPicture = path + "/" + name;
        // this.resultPicture = res.path;
    } else {
        uni.showToast({
            title: res.msg,
            icon: 'none',
            duration: 1500
        })
    }
});
  • 录制
var path = plus.io.convertLocalFileSystemURL("_doc/NoPriviewVideo");
let time = new Date().getTime();
var name = time + ".mp4"
let dic = {
    filePath: path,
    fileName: name,
    duration:5//录制时长默认60秒
}
this.$refs.noPriviewCapture.takeRecordVideo(dic, res => {
    if (res.code == 200) {
        this.videoPath = res.path
        console.log(res.path)
    } else {
        uni.showToast({
            title: res.msg,
            icon: 'none',
            duration: 1500
        })
    }
});
  • 停止录制
this.$refs.noPriviewCapture.stopTakeVideo();
  • 删除指定路径下资源
let path = this.resultPicture;
this.$refs.noPriviewCapture.deleteFile(path, res => {
    uni.showToast({
        title: res.deleteResult == true ? "清除成功" : "清除失败",
        icon: 'none',
        duration: 1500
    })
});
  • 切换摄像头
this.$refs.noPriviewCapture.switchCamera();

完整示例

<template>
    <view class="content">
        <ly-noPreviewCapture ref="noPriviewCapture" style="width: 1rpx;height: 1rpx;background-color: blue;" mode="PICTURE" :facing="facing"></ly-noPreviewCapture>
        <button class="btn" @click="takePicture()">拍照</button>
        <button class="btn" @click="takeVideo()" style="margin-top: 30rpx;">录制</button>
        <button class="btn" @click="stopTakeVideo()" style="margin-top: 30rpx;">停止录制</button>
        <button class="btn" @click="deletePath()" style="margin-top: 30rpx;">删除</button>
        <button class="btn" @click="switchCamera()" style="margin-top: 30rpx;">切换摄像头</button>
        <text style="margin-top: 30rpx;">拍照结果</text>
        <image :src="resultPicture" style="width: 750rpx;height: 400rpx;margin-top: 40rpx;"></image>
    </view>
</template>

<script>
    export default {
        data() {
            return {
               facing:"BACK",//BACK:后置摄像头   FRONT:前置 默认前置
                resultPicture: '',
                videoPath: '',
                mode:"PICTURE",//VIDEO:视频录制  PICTURE:拍照(默认)
                firstOnShow:true//防止触发两次onShow回调
            }
        },
        onShow() {
            if(this.firstOnShow && this.$refs.noPriviewCapture != null){
                this.$refs.noPriviewCapture.openCameraView();
                this.firstOnShow = false;
            }
        },
        onHide() {
            this.$refs.noPriviewCapture.closeCamera();
            this.firstOnShow = true;
        },
        methods: {

            takePicture() {
                // 抓拍图片存放路径
                var path = plus.io.convertLocalFileSystemURL("_doc/NoPriviewCapture");
                let time = new Date().getTime();
                var name = time + ".jpg"
                let dic = {
                    filePath: path,
                    fileName: name
                }
                this.$refs.noPriviewCapture.takePicture(dic, res => {
                    if (res.code == 200) {
                        this.resultPicture = path + "/" + name;
                        // this.resultPicture = res.path;
                    } else {
                        uni.showToast({
                            title: res.msg,
                            icon: 'none',
                            duration: 1500
                        })
                    }
                });
            },
            // 录制
            takeVideo() {
                var path = plus.io.convertLocalFileSystemURL("_doc/NoPriviewVideo");
                let time = new Date().getTime();
                var name = time + ".mp4"
                let dic = {
                    filePath: path,
                    fileName: name,
                    duration:5//录制时长默认60秒
                }
                this.$refs.noPriviewCapture.takeRecordVideo(dic, res => {
                    if (res.code == 200) {
                        this.videoPath = res.path
                        console.log(res.path)
                    } else {
                        uni.showToast({
                            title: res.msg,
                            icon: 'none',
                            duration: 1500
                        })
                    }
                });
            },
            //停止录制
            stopTakeVideo() {
                this.$refs.noPriviewCapture.stopTakeVideo();
            },
            //删除指定路径下资源
            deletePath() {
                if (this.resultPicture == "") {
                    uni.showToast({
                        title: "路径为空",
                        icon: 'none',
                        duration: 1500
                    })
                    return;
                }
                this.$refs.noPriviewCapture.deleteFile(this.resultPicture, res => {
                    uni.showToast({
                        title: res.deleteResult == true ? "清除成功" : "清除失败",
                        icon: 'none',
                        duration: 1500
                    })
                });
            },
            // 切换摄像头
            switchCamera(){
                this.$refs.noPriviewCapture.switchCamera();
            }
        }
    }
</script>

<style>
    .content {
        display: flex;
        position: relative;
        width: 750rpx;
        flex: 1;
        background-color: aqua;
    }

    .btn {
        margin-top: 20rpx;
        width: 680rpx;
        margin-left: 35rpx;
        height: 60rpx;
        background-color: antiquewhite;
    }
</style>

超好用插件推荐

百度人脸识别、活体检测、离线采集:https://ext.dcloud.net.cn/plugin?id=13124

百度OCR识别:https://ext.dcloud.net.cn/plugin?id=12971

华为扫描:https://ext.dcloud.net.cn/plugin?id=11645

海康威视:https://ext.dcloud.net.cn/plugin?id=12648

高德定位后台定位、应用保活:https://ext.dcloud.net.cn/plugin?id=12620

加斜体水印:https://ext.dcloud.net.cn/plugin?id=12651

经典蓝牙&&BLE:https://ext.dcloud.net.cn/plugin?id=12955

截屏、防截屏、录屏:https://ext.dcloud.net.cn/plugin?id=13285

隐私、权限声明

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

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

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

插件不采集任何数据

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问