可用,但需 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.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 补全,否则服务端解析失败。











