更新记录
1.0.4(2021-11-01)
1 增加主动调用上传方式, 和后台服务自动扫描 双线运行 最大可能保证录音上传 2 华为手机和voio 手机路径默认处理, 优化每次安装需要重新选择路径问题, 其他小伙伴可以把路径存储到服务器解决
1.0.3(2021-09-26)
1 解决oppo find x3 录音无法上传问题 2 此插件已上线公司产品上,会持续根据客户反馈进行优化
1.0.2(2021-09-14)
1 文档完善
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | × |
1 选择插件,制作自定义基座
- manifest.json -> app原生插件配置 -> 选择原生插件 -> 勾选本插件
- hbuilderx 运行 -> 运行到手机或模拟器 -> 制作自定义基座
- hbuilderx 运行 -> 运行到手机或模拟器 -> 运行基座选择 -> 自定义基座
插件使用前置
- 此插件只提供了录音上传功能,不包含手机录音功能
- 此插件只提供了录音上传功能,不包含手机录音功能
- 此插件只提供了录音上传功能,不包含手机录音功能
- 手机录音需要打电话时 开启录音 或者 手机设置界面 开启通话自动录音
- 手机录音需要打电话时 开启录音 或者 手机设置界面 开启通话自动录音
- 手机录音需要打电话时 开启录音 或者 手机设置界面 开启通话自动录音
安卓版本兼容问题
- 目前手里的 只有几部 android 10 版本的手机 分别是华为 vivo 小米的 目前测试没有发现问题
- android 11 待验证
使用插件
- 项目根目录 main.js 导入插件
if (plus.os.name.toLowerCase() == "android") {
var callRecord = uni.requireNativePlugin("zyjw-call_record")
Vue.prototype.$call = callRecord
}
// 增加主动触发上传方法
Vue.prototype.$uploadCall = function() {
if (plus.os.name.toLowerCase() == "android") {
console.log("$uploadCall 开始")
setTimeout(() => {
console.log("$uploadCall 执行")
Vue.prototype.$call.upLoad(
(ret) => {
Vue.prototype.$util.showToastMsg(ret);
})
}, 1000)
}
}
- 初始化 在app.vue onLaunch 中初始化
if (plus.os.name.toLowerCase() == "android") {
//录音
app.$call.init({
'host': config.serverUrl + "/" //config.serverUrl 替换成自己项目的
},
(ret) => {
uni.showToast({
title: ret,
icon: 'none',
duration: 2000
})
})
}
- 用户初始使用时候需要让用户选择下 录音文件的路径 请结合业务实现页面 如 按钮 或者 上图 点击事件调用插件 方法如下,(插件内部使用了本地存储,只要不卸载此app 路径一致有效,只需要用户选择一次即可)
// const app = getApp() 我的项目用的是nvue 所以全局变量需要使用app 如果你的是vue的可以 直接 this.$call.fileChooser
app.$call.fileChooser(
(ret) => {
console.log(ret.path)
if(ret.path){
_that.path = ret.path
}
})
- 插入记录上传录音(每分钟扫描一次)
//添加电话记录 这里用到了 moment 请自行导入(import moment from 'moment') 或者 自行实现时间戳转化
if (plus.os.name.toLowerCase() == "android") {
const dataStr = moment().format("YYYYMMDDHHmmss");
let _obj = {
'phone': page.form.customerPhone,
'dataStr': dataStr,
'historyId': res.historyId
}
console.log("添加电话记录", _obj)
app.$call.addCall(_obj, (ret) => {
if (ret.code == 1) { // 插入记录成功后, 后台会启动service服务自动扫描上面设置的路径 匹配电话上传到服务器接口
// app.$util.showToastMsg("添加录音成功")
app.$uploadCall()
} else {
// app.$util.showToastMsg("添加录音失败")
}
setTimeout(function() {
uni.navigateBack({
delta: 1
});
}, 1000)
})
}
- 上传路径说明
// @POST("/idcc/lead/uploadCallRecord/{historyId}")
1 上传路径是前面初始化时设置的 serverUrl + /idcc/lead/uploadCallRecord/{historyId} 其中 historyId 作为业务的识别标识,可以通过这个字段结合业务实现自己的业务需求
- 后台服务器(找后台同事写个文件上传接口, 路径按照下面固定的 historyId 是动态参数)
1 需要后台提供 /idcc/lead/uploadCallRecord/{historyId} Post文件上传接口 2 路径目前是固定的,后面考虑改为配置项 3 录音文件格式是m4a 默认使用 file 字段上传
api
-
getFilePath 获取用户设置的录音文件路径 使用场景 录音路径回显
var ret = app.$call.getFilePath() console.log("获取文件路径", ret.path)
-
getList 获取最近的100 条数据
app.$call.getList(
(ret) => {
console.log(ret.list)
if (ret.list) {
console.log("获取文件路径", ret.path)
}
})
// 字段说明
id 唯一标识
phone 手机号
historyId 业务标识
status 上传状态 0 未上传 1 上传中 2上传成功 3上传失败
retryCount 上传次数 当尝试上传3次依然未上传成功的,将会标记 上传失败
dataStr 时间戳
使用到的权限 插件使用动态权限获取,第一次调用插件时候 会自动弹出权限提示
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />