1. 录音功能开发前的准备工作
开发一个完整的录音功能,首先需要了解不同平台的权限机制。Android和iOS对于录音权限的处理方式截然不同,这也是很多新手开发者容易踩坑的地方。我在实际项目中遇到过不少因为权限配置不当导致功能无法正常使用的情况,下面就来详细说说如何正确配置。
对于Android平台,我们需要在manifest.json文件中明确声明录音权限。这个文件相当于整个应用的"身份证",所有需要用到的系统权限都必须在这里提前声明。具体配置如下:
json复制{
"permission": [
{
"android.permission.RECORD_AUDIO",
"uses-permission": "用于录音功能"
}
]
}
iOS平台的配置则更为复杂一些,不仅需要在manifest.json中声明,还需要在Xcode工程中进行额外设置。这是因为iOS对用户隐私的保护更加严格。在manifest.json中的配置是这样的:
json复制{
"ios": {
"privacyDescription": {
"NSMicrophoneUsageDescription": "需要使用麦克风进行录音"
}
}
}
这里有个小技巧:iOS的权限描述文字(NSMicrophoneUsageDescription)会直接显示在系统弹窗中,所以最好写得清晰易懂,让用户明白为什么需要这个权限。我见过很多应用因为描述不清导致用户拒绝授权,这点要特别注意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动态权限申请实战
配置完静态权限后,接下来就是动态申请了。这里有个重要原则:永远不要假设用户已经授权。我在实际开发中遇到过不少因为假设用户已经授权而导致应用崩溃的情况。
对于Android平台,我们可以封装一个统一的权限请求方法:
javascript复制async function requestRecordPermission() {
try {
const status = await uni.authorize({
scope: 'scope.record'
});
if (status.authSetting['scope.record']) {
return true;
} else {
await uni.showModal({
title: '提示',
content: '需要录音权限才能使用该功能',
showCancel: false
});
return false;
}
} catch (err) {
console.error('权限请求失败:', err);
return false;
}
}
iOS平台的处理稍微复杂一些,因为涉及到两次权限检查:
javascript复制function checkIOSPermission() {
return new Promise((resolve) => {
const audioSession = plus.ios.import('AVAudioSession');
const session = audioSession.sharedInstance();
const permission = session.recordPermission();
if (permission === 0) { // 未决定
session.requestRecordPermission((granted) => {
resolve(granted);
});
} else if (permission === 1) { // 已授权
resolve(true);
} else {
