讲师中心 微信公众号
AI工具推荐 视频效率加速

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

千宇大大_3791

千宇大大_3791

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

|

1128人浏览过

|

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

录音参数 duration 和 format 怎么设才不踩坑

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

性能影响明显: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:// 协议会被拒绝。

常见错误现象:打印 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

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

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

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

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

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

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

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2743

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5943

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6890

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6658

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

943

2024.05.22

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

20

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

40

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

140

2026.10.22

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn