更新记录

2.5.0(2022-10-09)

本次主要更新: 1.ios修复时长为负数的情况

2.4.0(2022-06-30)

本次主要更新:

  1. 增加获取录音状态方法 2.andorid 修复没有先start,其它方法没有回调 3.andorid 增加是否申请权限

2.3.0(2022-06-28)

本次主要更新: 1.android 增加 通知 是否设置震动

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:9 - 16

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


KJ-Audio

录音支持暂停、继续、后台录音、熄屏录音(ios、andorid)

录音支持实时帧pcm回调、暂停、继续、后台、息屏、长时间、onFrameRecorded 功能更多的插件:https://ext.dcloud.net.cn/plugin?id=11125

注意

    1.andorid需要配置:manifest.json -> app-plus -> distribute -> android -> targetSdkVersion  
    targetSdkVersion 要设置 >= 23

    2.andorid 自定义通知的图标和小图标,不设置的话,默认是插件里的默认图标
    需要在 主目录->nativeplugins->KJ-Audio->android->res->drawable 下配置添加 kj_audio_push_small.png(小图标) 和 kj_audio_push.png(图标)
    详情下载参考示例项目

    小图标设计要求是特殊的, 特别需要注意以下两点:
        a.必须是透明的底;
        b.内部形状颜色为白色最佳; (是其他颜色也可以, 但好像最终也会转成,通知栏显示白色, 通知左上角图标灰色)

andorid push_small小图标注意事项:https://ask.dcloud.net.cn/article/39429

后台录音 不保证所有手机有效

    ios:
    manifest.json->App常用其它设置->后台运行能力  填入“audio” 然后运打包
    andorid:
    KJAudio.start 的isService参数设置为true

导入插件

const KJAudio = uni.requireNativePlugin('KJ-Audio');

使用

<template>
    <view>
        <button type="primary" @click="start">开始录音</button>
        <button type="primary" @click="pause">暂停录音</button>
        <button type="primary" @click="resume">继续录音</button>
        <button type="primary" @click="stop">停止录音</button>
        <button type="primary" @click="getStatus">获取状态</button>
        <button type="primary" @click="play">播放音频</button>
        <view>{{json}}</view>
    </view>
</template>

<script>
    const KJAudio = uni.requireNativePlugin('KJ-Audio');

    export default {
        data() {
            return {
                json: '',
                filePathName: ""
            }
        },
        onLoad() {},
        methods: {
            play() {
                var p = plus.audio.createPlayer(plus.io.convertAbsoluteFileSystem(this.filePathName));
                p.play(function() {
                    console.log("Audio play success!");
                }, function(e) {
                    console.log("Audio play error: " + e.message);
                });
            },
            start() {
                var dic = {
                    "filePath": plus.io.convertLocalFileSystemURL("_doc/KJ-Audio"), //保存缩略图的路径,必须传_doc下的本地绝对路径
                    "format": "wav", //音频格式,有效值 wav/aac
                    "sampleRate": 44100, //采样率,有效值 8000/16000/44100
                    "numberOfChannels": 2, //录音通道数,有效值 1/2
                    "encodeBitRate": 16000, //ios才支持 编码码率
                    "linearPCMBitDepthKey": 16, //ios才支持 线性采样位数 有效值 8, 16, 24, 32
                    "encoderAudioQuality": "High", //ios才支持 音频质量,采样质量 有效值 Min Low Medium High Max
                    "isService": true, //android才支持,是否开启后台服务,在后台和熄屏都可以录音
                    "notificationID": "KJ-Audio10", //android8才支持,通知ID
                    "notificationName": "主服务", //android8才支持,通知名
                    "notificationTitle": "录音服务", //android才支持,通知标题
                    "notificationText": "运行中...", //android才支持,通知内容
                    "isSetNotificationVibrate": false, //android才支持,是否设置震动,由于android机制,通知设置过了,就不能再修改,如果要修改,要先修改notificationID
                    "isRequestPermissions": true, //android才支持,是否申请RECORD_AUDIO权限
                }
                KJAudio.start(dic, (res) => {
                    this.json = JSON.stringify(res);
                    if (res.result = true && res.error == "systemStop") {
                        //ios 通话的时候,系统会自动停止,andorid,不受影响,只是不能录制,电话挂了之后,会继续录音
                        console.log("总时长: " + res.duration); //单位秒
                        console.log("stop: " + JSON.stringify(res));
                        this.filePathName = res.filePathName
                        setTimeout((res) => {
                            this.play()
                        }, 100)
                    }
                    console.log("start: " + JSON.stringify(res));
                    console.log("当前时长: " + res.second); //单位秒
                });
            },
            pause() {
                KJAudio.pause((res) => {
                    this.json = JSON.stringify(res);
                    //注意:ios 返回的录音文件不能播放
                });
            },
            resume() {
                KJAudio.resume((res) => {
                    this.json = JSON.stringify(res);
                    console.log("resume: " + JSON.stringify(res));
                });
            },
            stop() {
                KJAudio.stop((res) => {
                    this.json = JSON.stringify(res);
                    console.log("总时长: " + res.duration); //单位秒
                    console.log("stop: " + JSON.stringify(res));
                    this.filePathName = res.filePathName
                    this.play()
                });
            },
            getStatus() {
                if (plus.os.name == 'Android') {
                    KJAudio.getStatus((res) => {
                        var result = res.result; //0-未开始 1-预备 2-开始 3-暂停 4-停止
                        console.log("getStatus: " + JSON.stringify(res));
                    })
                } else {
                    KJAudio.isRecording((res) => {
                        var result = res.result; //是否在录音
                        console.log("isRecording: " + JSON.stringify(res));
                    })
                }
            }
        }
    }
</script>

隐私、权限声明

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

ios:麦克风权限。 andorid:android.permission.RECORD_AUDIO

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

插件不采集任何数据

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

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