1 在6.0.1版本上报3001
在低版本安卓手机录音和语音识别不能同时进行,如果先开始录音,语音会报3001,语音识别失败,如果先开始语音识别,那么就会录不了音,获取到的本地录音文件没有声音并且特别短。所以录音传给后台,让后台去识别
2 录音传给后台的格式
录音传给后台,后台说需要用pcm格式,但前台转的格式在后台不能用,uin-app提供的别的格式传到后台不能直接使用,得需要后台转一下格式
3 低版本安卓的授权
uin-app 提供了一个插件,可以检测是否授权,但在低版本不好用,个别手机一直是授权成功的状态,所以需要判断,但在低版本好像没有好的办法,反正我没找到,最后我一进页面就录音,判断录音文件的大小,如果没有授权就会蹦授权弹框,用户点击拒绝,就会回调获取本地录音文件事件,如果点击允许,就会开始录音,根据录音文件的大小就可以判断出用户是否授权,但获取本地录音文件和判断大小都是异步的,所以会有一些延迟,体验不是太好
onLoad() {
var that = this;
// 录音授权
recorderManager.onStop(function(res) {
uni.getFileInfo({
filePath:res.tempFilePath,
success:function (res) {
that.authRecords = true;
if(res.size > 1728){
uni.setStorageSync('_luyinshouquan', 1);
}else{
uni.setStorageSync('_luyinshouquan', 0);
}
},
fail:function (res) {
console.log(res);
}
})
});
if(!this.authRecords){
this.lushouquan();
}
},
// 录音授权
lushouquan(){
let that = this;
//判断平台 0 安卓 1 iOS
if(this.$aios() == 0){
//高版本查看是否授权
var permisionID = 'android.permission.RECORD_AUDIO';
var result = permision.requestAndroidPermission(permisionID)
result.then(res => {
//res == 1高版本同意授权 低版本不管授不授权会直接进来res直接等于1
if (res == 1) {
let options = {
format:'mp3',
sampleRate:16000,
numberOfChannels:1,
// encodeBitRate:96000
}
recorderManager.start(options);//开始录音
setTimeout(function(){
recorderManager.stop();//经过10秒结束录音
},10000)
}else{
uni.setStorageSync('_luyinshouquan', 0);//高版本拒绝授权
}
})
}else{
var result = permision.judgeIosPermission("record")
if(result){
uni.setStorageSync('_luyinshouquan', 1);
}else{
uni.setStorageSync('_luyinshouquan', 0);
}
}
},