uni-app实现外呼APP,上传通话录音(APP已开源)

记得拿到这个需求的时候,还是两年前。当时ai还没有现在这么强大,很多资料查起来都不全,而且稀奇古怪。 后面基本都是自己翻安卓文档,一点一点的实现的,😂。

APP完整代码已开源,提供mock接口,可直接打包运行。

Github:github.com/friend-nice...

安卓很早以前没办法通过系统应用之外的应用来实现通话录音了,现有的通话录音实现方案,基本都是强制用户开启手机自带的通话录音。

然后APP再去读取系统录音文件,实现上传。

安卓原生实现起来,感觉挺方便的,但是uniapp来实现的话,就多了很多弯弯绕绕。

各种艰辛也忘的差不多了,只记得需求都很好的实现了,今天再回过头来,踩过的坑也依然历历在目。

第一坑

h5+的API限制了用户读取手机文件的权限,想要读取应用目录之外的文件,实现不了。只能用native.js调用java反射的各种对象去读取系统文件。

ini 复制代码
let File = plus.android.importClass("java.io.File");
let Dirs = new File(Dir);
let temp = Dirs.listFiles();

第二坑

然后更坑的是,好不容易反射拿到文件对象了,该怎么上传呢?

通过h5+

javascript 复制代码
const task = plus.uploader.createUpload(
    `${api.add_audio}?id=${param}`,
    {
        method: "POST",
        priority: 100
    },
    (ob, status) => {
        resolve({
            ob,
            code: status
        });
    }
);

/* 添加待上传的文件 */
task.addFile("file://" + filePath, {key: "file"});

task.start();

这个是最合适的,但是h5+的api只能上传应用目录下的文件,系统文件压根不让传。

js

通过nativa.js反射读取java文件流,只能一个字节一个字节的获取,读取巨慢!几百kb都得几分钟,😂。 印象中这是最难的一步,当时已经快放弃了,😂。

ini 复制代码
let FileInputStream = plus.android.importClass("java.io.FileInputStream");
let reader = new FileInputStream(file);

最后想着把文件复制到应用目录,再通过H5+上传。

然后试了一下一个文件流读,写到另一个文件流,也是巨慢

然后去复习了一下学过的java基础,发现了新大陆,实现起来又快又好。

ini 复制代码
let appFile = plus.android.runtimeMainActivity().getApplicationContext().getFilesDir().getPath(); //应用目录
let reader = new FileInputStream(file);
let temp = appFile + "/" + (new Date()).getTime() + ".mp3";
let out = new FileOutputStream(temp);
let fisChannel = reader.getChannel();
let fosChannel = out.getChannel();

/* 将fisChannel通道的数据,写入到fosChannel通道 */
fisChannel.transferTo(0, fisChannel.size(), fosChannel);
reader.close();
out.close();

最后就是调用h5+上传录音,上传了再顺手清理掉。

到这一步,核心都已经完成了。

相信大家已经可以通过这些来完善自己的业务逻辑了。

结语

具体的细节还有挺多的,比如如何获取对应手机的录音文件路径、如何读取通时通次。上班的摸鱼时间有限,就不一一赘叙,可以参考上述的开源项目

相关推荐
说私域3 小时前
零售新范式:开源AI大模型、AI智能名片与S2B2C商城小程序源码驱动下的圈层渗透革命
人工智能·开源·零售
算家计算4 小时前
告别“AI味”图像!最新开源AI模型FLUX.1-Krea实现真实光影生成
人工智能·开源·aigc
从零开始学习人工智能6 小时前
Coze Studio:开源AI Agent开发工具的全方位实践指南
人工智能·开源
Albert_Lsk6 小时前
【2025/07/31】GitHub 今日热门项目
人工智能·开源·github·开源协议
一千柯橘6 小时前
Milkdown:重塑 Markdown 编辑体验的开源利器【实时预览你的 markdown 内容】倍儿爽!
前端·开源·markdown
神经星星8 小时前
在线教程丨全球首个 MoE 视频生成模型!阿里 Wan2.2 开源,消费级显卡也能跑出电影级 AI 视频
人工智能·机器学习·开源
白鲸开源9 小时前
从日志到告警,带你用好 SeaTunnel 的事件监听能力
大数据·数据分析·开源
算家计算10 小时前
全新升级!Nexus-Gen V2本地部署教程:图像理解能力媲美GPT-4o
人工智能·开源·aigc
ajassi200010 小时前
开源 Arkts 鸿蒙应用 开发(十二)传感器的使用
linux·华为·开源·harmonyos
DevSecOps选型指南11 小时前
技术分享 | 悬镜亮相于“2025开放原子开源生态大会软件物料清单(SBOM)”分论坛
开源·开放原子·软件供应链安全工具·投毒情报中心·投毒情报