更新记录

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" />

有任何bug问题 请评论或者联系qq (1497701038) wx (q2342234)说明

隐私、权限声明

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

<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" />

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

插件不采集任何数据

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

暂无用户评论。

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