后台持续播放无声音频,流氓做法实现
在app.vue里初始化
<script>
import Vue from 'vue';
let AUDIO = uni.createInnerAudioContext()
export default {
// 司机端
onLaunch: function() {
this.initAudio(AUDIO)
console.log('App Launch');
uni.getSystemInfo({
success: e => {
// 状态栏高度px
Vue.prototype.statusHeight = e.statusBarHeight;
Vue.prototype.screenHeight = e.screenHeight;
Vue.prototype.screenWidth = e.screenWidth;
Vue.prototype.platform = e.platform;
Vue.prototype.widthRatio = e.screenWidth / 750;
Vue.prototype.AUDIO = AUDIO
}
});
// #ifdef MP
uni.setEnableDebug({
enableDebug: true
});
// #endif
},
onShow: function() {
// AUDIO.src = '/static/msg.mp3'
console.log('App Show');
},
onHide: function() {
console.log('App Hide');
},
methods:{
initAudio(AUDIO) {
let _this = this
console.log('初始化音频播放', AUDIO);
// onCanplay callback 音频进入可以播放状态,但不保证后面可以流畅播放
// onPlay callback 音频播放事件
// onPause callback 音频暂停事件
// onStop callback 音频停止事件
// onEnded callback 音频自然播放结束事件
// onTimeUpdate callback 音频播放进度更新事件
// onError callback 音频播放错误事件
// onWaiting
AUDIO.
onCanplay((e) => {
console.log('音频进入可以播放状态,但不保证后面可以流畅播放', e);
// AUDIO.play()
})
AUDIO.onPlay((e) => {
console.log('音频播放事件', e);
})
AUDIO.onPause((e) => {
console.log('音频暂停事件', e);
})
AUDIO.onStop((e) => {
console.log('音频停止事件', e);
})
AUDIO.onEnded((e) => {
AUDIO.play()
// AUDIO.stop()
// _this.voiceLoading = false
console.log('音频自然播放结束事件', e);
})
AUDIO.onTimeUpdate((e) => {
// console.log('音频播放进度更新事件', e);
})
AUDIO.onError((e) => {
console.log('音频播放错误事件', e);
})
AUDIO.onWaiting((e) => {
console.log('音频等待事件', e);
})
},
}
};
</script>
<style lang="scss">
// 全局CSS样式在这里引入
@import "@/uni_modules/uview-ui/index.scss";
</style>
然后在需要的页面使用
<template>
<view class="tabbar-page">
<u-popup :show="updateTask==1" mode="center" :round="10" @close="close">
<view class="popup ">
<view class="popup-content">有新任务,请注意更新!</view>
<u-button type="success" iconColor='#000' size="large" shape='circle' text="关闭"
customStyle="width: 200rpx" @click="close"></u-button>
</view>
</u-popup>
</view>
</template>
<script>
// 引入组件
import {
mapActions,
mapState
} from "vuex"
export default {
data() {
return {
start: false,
// 请求次数
reqNum: 0,
timer: null,
show: false,
};
},
computed: {
...mapState({
"updateTask": state => state.user.updateTask,
}),
},
watch: {
// 全局弹窗
updateTask(newvalue) {
if (this.start) {
if (newvalue == 1) {
this.AUDIO.stop()
this.AUDIO.src = '/static/update-msg.MP3'
this.AUDIO.play()
} else {
this.AUDIO.stop()
this.AUDIO.src = '/static/msg.mp3'
this.AUDIO.play()
}
}
}
},
components: {
// 注册组件
},
onReady() {
},
onShow() {
this.start = true
// this.$store.commit('user/SET_UPDATE_TASK', 0)
//接口
this.getUpdate()
this.AUDIO.play()
if (this.PageCur == 0) {
setTimeout(() => {
this.$refs.home.getIndex(null, 1)
}, 0)
}
console.log('indexshow----------', this.updateTask);
},
// 下拉刷新
onPullDownRefresh() {
setTimeout(() => {
uni.stopPullDownRefresh()
}, 2000)
},
onLoad(e) {
},
methods: {
...mapActions(['getUpdateTask', 'readTask']),
getUpdate() {
if (this.timer) {
} else {
this.timer = setInterval(() => {
this.reqNum++
this.getUpdateTask()
console.log('开始请求接口', this.reqNum);
}, 10000)
}
// this.getUpdateTask()
},
close() {
console.log('关闭');
if (this.readTask()) {
if (this.getUpdateTask()) {
this.AUDIO.stop()
this.AUDIO.src = '/static/msg.mp3'
this.AUDIO.play()
this.$refs.home.getIndex('Refresh', 2)
}
}
// this.$store.state.user.newTask = '2'
// if (this.PageCur == 0) {
// this.$refs.home.getIndex('Refresh', 2)
// }
},
}
};
</script>
<style lang="scss" scoped>
.popup {
padding: 40rpx;
width: 50vw;
height: 40vh;
font-size: 40rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
.popup-content {
// margin-bottom: 20rpx;
}
}
</style>