0

0

uni-app录音功能实现 uni-app如何使用录音管理器API

畫卷琴夢

畫卷琴夢

发布时间:2026-03-16 21:39:14

|

908人浏览过

|

来源于php中文网

原创

uni.getRecorderManager()录音无响应需检查权限配置、初始化时机及平台差异:iOS需NSMicrophoneUsageDescription,Android需RECORD_AUDIO权限;必须onLoad后调用并主动授权;H5需用MediaRecorder;参数duration单位为毫秒,format推荐aac;tempFilePath需按平台处理路径;须监听onInterruptionBegin/End应对中断。

uni-app录音功能实现 uni-app如何使用录音管理器api

uni.getRecorderManager() 录音没反应?检查基础权限和初始化时机

uni-app 的录音功能依赖 uni.getRecorderManager(),但它本身不触发任何行为——你得手动调用 start(),且必须确保用户已授权录音权限。iOS 和 Android 行为差异大:iOS 要求在 manifest.json 里配置 NSMicrophoneUsageDescription,Android 则需在 permissions 中声明 android.permission.RECORD_AUDIO;未配置时,start() 会静默失败,控制台也不报错。

常见错误现象:onStart 不触发、onError 也收不到回调、getRecorderManager() 返回对象看似正常但完全无响应。

  • 务必在 onLoad 或用户点击按钮后才调用 uni.getRecorderManager(),不要在 datacreated 钩子中提前初始化(某些平台下 manager 实例不可用)
  • 调用 start() 前,先用 uni.authorize({scope: 'scope.record'}) 主动申请权限,别依赖自动弹窗(H5 不支持该 API,需降级处理)
  • H5 端无法使用此 API,必须用 MediaRecorder 替代,且仅限 HTTPS 环境;开发时容易误以为“写了就跑通”,上线后发现白屏或静音

录音参数 durationformat 怎么设才不踩坑

duration 是毫秒单位,不是秒——设成 60 就是录 60 毫秒,根本来不及反应;format 决定输出格式,但不同端支持程度天差地别:mp3 在 iOS 微信内嵌 WebView 中基本不可用,aac 是最稳妥选择,Android 和 iOS 均原生支持,H5 则只认 webmogg(还得看浏览器)。

性能影响明显:format: 'wav' 体积爆炸(1 秒 ≈ 170KB),上传慢、解码卡,纯属自找麻烦;sampleRate 设太高(如 44100)在低端安卓机上容易触发 onError 并返回 recorder error: 1002(硬件不支持)。

  • 推荐配置:{ duration: 60000, format: 'aac', sampleRate: 16000, numberOfChannels: 1, encodeBitRate: 48000 }
  • 微信小程序要求 duration 必须 ≤ 60000,超时会自动停止,且不会触发 onStop,只能靠 onInterruptionBegin 监听异常中断
  • 真机调试时,用 adb logcat 或 Xcode 控制台看底层报错,比 uni-app 的 onError 更早暴露问题

onStop 拿不到 tempFilePath?路径权限和生命周期是关键

录音结束后的 tempFilePath 是临时路径,只在本次小程序/应用生命周期内有效。iOS 下该路径形如 file:///var/mobile/Containers/Data/Application/xxx/tmp/xxx.m4a,不能直接传给 uni.uploadFile——后者只接受 http://https://本地相对路径(如 tmp_abc.m4a),而 file:// 协议会被拒绝。

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

下载

常见错误现象:打印 res.tempFilePath 看起来正常,但 uni.uploadFile 报错 uploadFile:fail invalid file path;或者 H5 端拿到的是 Blob 对象,不是路径字符串。

  • Android 和 iOS 必须用 uni.saveFile({ tempFilePath }) 先转成持久路径,再上传;注意 saveFile 成功后返回的 savedFilePath 才能用于上传
  • 微信小程序可跳过 saveFile,直接用 tempFilePath 上传,但需确保没有跨页面跳转——页面卸载后临时文件被清空,tempFilePath 失效
  • uni-app 的 tempFilePath 在 H5 端实际是 Blob URL(blob:http://xxx),上传前得用 URL.createObjectURL(blob) 转换,或改用 FormData 直接提交 Blob

录音中途被电话/闹钟打断?onInterruptionBeginonInterruptionEnd 必须监听

移动端录音极其脆弱:来电、微信语音通话、系统闹钟、甚至某些国产手机的“省电模式”都会强制中断录音,且不会触发 onStop。如果不监听中断事件,用户可能以为还在录,实际已停,最后上传空文件或旧文件。

iOS 和部分安卓厂商(如华为 EMUI)对后台音频限制极严,录音时切到后台 1–2 秒就会被系统终止;微信小程序在前台时也可能因其他小程序抢占音频资源而中断。

  • 必须在获取 manager 后立即绑定:manager.onInterruptionBegin(() => { console.log('录音被中断'); })
  • onInterruptionEnd 不代表能自动恢复录音——它只是通知“中断结束了”,你还得手动调用 start(),并重置计时器、UI 状态等
  • 真机测试时,用另一台手机打自己号码,比模拟器更真实;别只测“点开始→点停止”这种理想流

录音不是调个 API 就完事,从权限、格式、路径到中断恢复,每一步都有平台特异性。最容易被忽略的是:你以为的“一次调用”在不同端其实是三套实现逻辑,混在一起写,上线就出声儿——没声儿。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

83

2025.09.10

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

888

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

465

2024.06.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

384

2023.10.25

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号