今天在华为nova 4e 型号MAR-AL00 安卓9版本测试, 调用录音api时,app闪退了,但是在小米手机测试,不会出现,使用的老模板模式编译模式,代码如下:
<template>
<view class="record-index border-box" style="margin-bottom: 20upx;">
<view class="flex" style="justify-content: space-between;">
<view style="font-size:28upx;color:rgba(78,102,88,1);font-weight: bold;">语音描述(<text style="font-size: 24upx;color: #999999">录音时长最大为10分钟</text>)</view>
<view class="" style="font-size:28upx;color:rgba(204,113,102,1);font-weight:bold;" @tap="onDeleteTap" v-if="isRecord>=2">删除录音</view>
</view>
<view class="flex" style="align-items: center;justify-content: space-between;margin-top: 28upx;">
<view class="" style="width: 100%;">
<button v-if="isRecord < 2" @longpress="onStartRecordTap" @touchend="onStopRecordTap" type="primary" style="background: #66CC99;height: 72upx;line-height: 72upx;border-radius: 0;width: 100%;font-size: 28upx;">
{{
isRecord === 0?'点击录制':'录制中'
}}
</button>
<button v-else @tap="onPlayRecordTap" type="primary" style="background: #66CC99;height: 72upx;line-height: 72upx;border-radius: 0;width: 100%;font-size: 28upx;">
{{
timing+(isRecord == 2?' 点击播放':' 正在播放')
}}
</button>
</view>
<!-- <view
class="flex"
style="align-items: center;justify-content: space-between;width:464upx;background:rgba(255,255,255,1);box-shadow:0px 4px 8px rgba(0,0,0,0.08);height:72upx;border-radius:36upx;"
>
<view style="position: relative;width:310upx;height: 72upx;">
<text style="width:310upx;height: 2upx;background: #66CC99;display: inline-block;position: absolute;top: 50%;transform: translateY(-50%);"></text>
<view class="" v-if="isRecord ===3||isRecord ===1">
<text class="billow billow1" style="left: 20upx;"></text>
<text class="billow billow2" style="left: 35upx;"></text>
<text class="billow billow3" style="left: 50upx;"></text>
<text class="billow billow4" style="left: 65upx;"></text>
<text class="billow billow5" style="left: 80upx;"></text>
<text class="billow billow6" style="left: 95upx;"></text>
<text class="billow billow1" style="left: 110upx;"></text>
<text class="billow billow2" style="left: 125upx;"></text>
<text class="billow billow3" style="left: 140upx;"></text>
<text class="billow billow4" style="left: 155upx;"></text>
<text class="billow billow5" style="left: 170upx;"></text>
<text class="billow billow6" style="left: 185upx;"></text>
<text class="billow billow1" style="left: 200upx;"></text>
<text class="billow billow2" style="left: 215upx;"></text>
<text class="billow billow3" style="left: 230upx;"></text>
<text class="billow billow4" style="left: 245upx;"></text>
<text class="billow billow5" style="left: 260upx;"></text>
<text class="billow billow6" style="left: 275upx;"></text>
<text class="billow billow1" style="left: 290upx;"></text>
</view>
</view>
<text class="border-box" style="font-size:28upx;color:rgba(102,204,153,1);padding: 0 16upx;">
{{ timing }}
</text>
</view>
<view class="flex" style="align-items: center;">
<view class="" style="height: 72upx;line-height: 72upx;margin-right: 8upx;">
<text style="font-size:28upx;color:rgba(78,102,88,1);" v-if="isRecord <2">{{ isRecord == 1 ? '正在录制' : '点击录制' }}</text>
<image @tap.stop="onDeleteTap" src="../../static/record/delete@3x.png" style="border-radius: 36upx;width: 72upx;height: 72upx;box-shadow:0upx 4upx 8upx rgba(0,0,0,0.08);" v-else mode=""></image>
</view>
<image @tap.stop="onToggleRecordStatusTap" :src="iconPath" style="border-radius: 36upx;width: 72upx;height: 72upx;box-shadow:0upx 4upx 8upx rgba(0,0,0,0.08);" mode=""></image>
</view> -->
</view>
<view class="" @touchmove.stop.prevent="catchMove" v-if="isRecord === 1" style="position: fixed;top: 196upx;left:50%;transform: translateX(-50%);z-index: 9999;width: 480upx;height: 370upx;background:rgba(0,0,0,0.5);border-radius:8upx;">
<!-- <image src="../../static/images/microphone@3x.png" mode=""></image>
<image src="../../static/images/microphone@3x.png" mode=""></image> -->
<image src="../../static/images/recording.gif" mode="" style="width: 100%;height: 100%;border-radius: 8upx;"></image>
</view>
</view>
</template>
<script>
const soundRecords = uni.getRecorderManager();
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
let timer = null;
let minutes = 0;
let seconds = 0;
import { mapGetters } from 'vuex';
export default {
data() {
return {
timing: '0分0秒',
text: '',
isRecord: 0,
iconPath: '../../static/record/startrecord@3x.png',
voicePath: '',
time: 0,
isPlay: false
};
},
computed: {
...mapGetters(['getToken'])
},
mounted() {
console.log("1111")
},
onLoad() {
// this.$http.gettonken(this.getToken);
},
watch: {
"voicePath"(newValue) {
if(newValue){
console.log(this.time);
console.log(this.voicePath);
let voice = {
voicePath: newValue,
time: this.time
}
this.$emit("input",voice)
}
}
},
mounted(){
soundRecords.onStop(res => {
console.log(this.time);
clearTimeout(timer);
if(res.tempFilePath){
this.voicePath = res.tempFilePath
console.log(this.voicePath);
}else{
console.log("这里测试是否为空");
}
console.log('res: ' + JSON.stringify(res));
});
innerAudioContext.onEnded(() => {
this.isRecord = 2;
this.iconPath = '../../static/record/startplay@3x.png';
this.isPlay = false;
// this.timing = `0分0秒`;
});
},
methods: {
catchMove(){
return ;
},
onDeleteTap() {
this.voicePath = '';
this.timing = '0分0秒';
this.isRecord = 0;
minutes = 0;
seconds = 0;
this.isPlay = false;
this.iconPath= '../../static/record/startrecord@3x.png'
this.$modal({
title: "提示",
content: "删除成功",
showCancel: false
})
},
onToggleRecordStatusTap() {
switch (this.isRecord) {
case 0:
this.onStartRecordTap();
this.iconPath = '../../static/record/stoprecord@3x.png';
break;
case 1:
this.onStopRecordTap();
this.iconPath = '../../static/record/startplay@3x.png';
break;
case 2:
if(!this.isPlay){
this.isPlay = true;
this.onPlayRecordTap();
this.iconPath = '../../static/record/stopplay@3x.png';
}else{
this.toast("正在播放,请勿重复点击")
}
break;
}
},
onStartRecordTap() {
console.log('1: ');
soundRecords.start({
format: 'mp3'
});
this.isRecord = 1;
this.getTiming();
},
getTiming() {
if (this.isRecord == 1) {
if (minutes == 10 && seconds == 0) {
clearTimeout(timer);
minutes = 0;
seconds = 0;
} else {
this.time +=1;
console.log(this.time);
if (seconds == 59) {
seconds = 0;
minutes += 1;
} else {
seconds += 1;
}
this.timing = `${this.formatFull(minutes)}分${this.formatFull(seconds)}秒`;
timer = setTimeout(() => {
console.log(11);
this.getTiming();
}, 1000);
}
}
},
onStopRecordTap() {
soundRecords.stop();
console.log(this.time);
this.isRecord = 2;
},
onPlayRecordTap() {
if(this.isPlay){
this.toast("正在播放,请勿重复点击")
return ;
}
this.isPlay = true;
if (this.voicePath) {
// this.isRecord = 3;
innerAudioContext.src = this.voicePath;
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
}else{
console.log('res: ' + this.voicePath);
}
}
}
};
</script>
<style>
.record-index {
height: 200upx;
width: 100%;
background: #ffffff;
}
/* .billow{
width: 6upx;
height: 16upx;
display: inline-block;
background: #66CC99;
position: absolute;top: 50%;transform: translateY(-50%);
animation: play 1.8s linear infinite;
border-radius: 3upx;
}
.billow1{
height: 20upx;
animation-delay: .8s;
}
.billow2{
height: 56upx;
animation-delay: 1s;
}
.billow3{
height: 50upx;
animation-delay: 1.2s;
}
.billow4{
height: 40upx;
animation-delay: 1.4s;
}
.billow5{
height: 30upx;
animation-delay: 1.6s;
}
.billow6{
height: 16upx;
animation-delay: 1.8s;
}
@keyframes play{
0% {
height: 20upx;
}
16% {
height: 56upx;
}
32% {
height: 50upx;
}
48% {
height: 40upx;
}
54% {
height: 30upx;
}
80% {
height: 16upx;
}
100% {
height: 20upx;
}
} */
</style>
叶耳朵
什么时候能解决啊 这个闪退问题很严重啊。很多需要语音的地方都要用到录音。从今年4月份就有人反映了 这都快2021年了 都没解决 到底咋办啊
2020-12-31 16:47
叶耳朵
https://ask.dcloud.net.cn/question/59520
2020-12-31 16:48
叶耳朵
改了arm以后还是闪退
2020-12-31 16:48
DCloud_UNI_Anne
回复 叶耳朵: 请您按报bug模板重新发帖,并提供简单可复现的完整示例,说明复现设备具体信息。否则无法复现就很难排查解决你的问题。
2021-01-04 12:59