更新记录
2.7.0(2024-09-19)
回退版本到 2.5.0
2.6.0(2024-08-16)
1.修复andorid13及以上 start方法配置isService为true,闪退的bug
2.5.0(2022-10-09)
本次主要更新: 1.ios修复时长为负数的情况
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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>