跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

uni-app如何实现App端录音功能 uni-app录音管理与文件保存

可用,但需 manifest 配置权限 + 运行时申请双到位;iOS 需 NSMicrophoneUsageDescription 非空,Android 需声明 RECORD_AUDIO,HarmonyOS 需 ohos.permission.MICROPHONE;临时路径文件须 saveFile 保存至持久目录。 uni.getRecorderManager() 在 App 端是否可用? 可用,但有严格前提:仅限
App
平台(Android/iOS/HarmonyOS),
h5
和
小程序
不能直接用它调用原生麦克风——h5 需走
navigator.mediaDevices.getUserMedia
+
MediaRecorder
,小程序则受限于平台策略(如微信禁止后台录音)。App 端的
uni.getRecorderManager()
是 DCloud 封装的原生桥接 API,底层映射到 Android 的
MediaRecorder
、iOS 的
AVAudioRecorder
、HarmonyOS 的
AVRecorder
。 权限申请失败或没弹窗,常见原因和补救步骤 App 端权限不通过 JS 单独触发,必须「manifest 配置 + 运行时申请」双到位:
module.json5
中必须声明
android.permission.RECORD_AUDIO
(Android)或
ohos.permission.MICROPHONE
(HarmonyOS),否则
start()
直接静默失败 iOS 需在
manifest.json
的
plus → distributors → ios → permissions
下添加
microphone
,且
NSMicrophoneUsageDescription
字符串不能为空(否则冷启动闪退) 运行时要用
uni.authorize({scope: 'scope.record'})
或更稳妥的
uni.getSystemInfoSync().platform === 'android' ? permision.requestAndroidPermission('android.permission.RECORD_AUDIO') : uni.authorize(...)
(需引入插件市场「App权限判断和提示」) 若用户拒绝过一次,
uni.authorize
不再弹窗,此时应调用
permision.gotoAppPermissionSetting()
跳转系统设置页 录音文件路径怎么处理才不会丢? 默认
onStop
返回的
res.tempFilePath
是临时路径,App 重启或系统清理缓存后大概率失效。必须主动保存到持久目录: uni-app电商系统实战精讲课程课件 uni-app电商系统实战精讲课程 下载 优先用
uni.saveFile({tempFilePath: res.tempFilePath, success})
,它会把文件移到
uni.env.USER_DATA_PATH
下,路径稳定、可被分享、不会被自动清理 不要用
fs.copyFile
直接操作临时路径——部分 Android 厂商限制访问沙箱外路径,且
tempFilePath
可能是 content:// URI 格式,
copyFile
不识别 保存后建议立即调用
uni.getFileInfo
校验文件大小,避免空文件(常见于权限未真正生效就调用
start
) HarmonyOS NEXT 推荐用
format: 'aac'
+
sampleRate: 32000
,MP3 在部分机型上可能触发编码异常导致文件损坏 长按录音如何防误触、保时长、适配中断? 长按不是简单绑定
@touchstart
,得配合状态机和系统事件兜底: 触摸开始时启动计时器(
setTimeout
),松开(
@touchend
)或移出(
@touchcancel
)时清除;超时未松开则自动
stop
必须监听
recorderManager.onInterruptionBegin
(App 进入后台、来电、闹钟等场景),内部立刻
stop()
,否则录音持续占用资源且后续
start
失败 Android 上长按容易触发系统「语音助手」冲突,可在
start
前加短延时(
await new Promise(r => setTimeout(r, 100))
),错开系统监听窗口 录音时长限制别只靠
duration
参数——某些低端机该参数失效,应用层需自己维护
setInterval
计时,并在达到阈值前 500ms 主动
stop
最易忽略的是:HarmonyOS 和部分 Android 14+ 设备,
tempFilePath
返回的路径不含文件扩展名(比如只有
/data/user/0/xxx/cache/123
),上传前必须手动拼上
.aac
或根据
format
补全,否则服务端解析失败。

相关文章