audio通知栏切换歌曲停止播放,怎么破

news/2024/11/23 5:29:59/

问题描述:

音乐播放过程中,切换到应用其他页面时,用后台的状态栏切换音乐时音乐会暂停。

问题分析:

华为audio接口只能在页面中使用,当audio所在的页面退出后,页面销毁,绑定的上下文对象也随之不存在。 此时,在通知栏上一首、下一首切换歌曲时,后台播放服务首先暂停当前歌曲,状态重置,但是audio接口的绑定事件找不到上下文对象,无法触发previous和next事件,导致上述现象。

解决方案:

在应用首页监听audio事件,而不仅仅是在播放页面添加,当用户离开播放页面时,依然可以监听到audio的每个事件,从而去控制播放逻辑。

注意:由于华为快应用引擎不支持在app.ux里调用audio接口,所以当用户退出了整个应用,虽然后台依然在播放,但是快应用是不能收到audio的事件回调的。

实现代码:

以下示例demo中有两个页面:首页Main和音频Audio。为了避免重复代码,可维护性,将audio的相关代码独立出来作为一个公共的js,方便每个页面调用。

1)公共utils.js:

import audio from '@system.audio';
export default{listenAudio() {var that=this;console.info("util.js listenAudio ");audio.onplay = function () {console.log('audio onplay')}audio.onpause = function () {console.log('audio onpause')}audio.onended = function () {console.log('audio onended')}audio.ondurationchange = function () {console.log('util.js ondurationchange')var total = audio.durationconsole.log('util.js ondurationchange total=' + total)}audio.ontimeupdate = function () {var time = audio.currentTime//  console.log('util.js ontimeupdate time=' + time)}audio.onprevious = function () {audio.cover = 'https://xx.jpg'audio.title = "钢琴曲"audio.artist = "莫扎特"// Replace with NetEase cloud music resource linkaudio.src = 'https://xx.mp3'console.log(' util.js on previout event from notification ')}audio.onnext = function () {audio.cover = 'xx.jpg'audio.title = '轻音乐';audio.artist = '王菲'// Replace with NetEase cloud music resource linkaudio.src = 'https://xx.mp3'console.log(' util.js on next event from notification ')}},getAudioPlayState() {audio.getPlayState({success: function (data) {console.log(`getAudioPlayState success: state: ${data.state},src:${data.src},currentTime:${data.currentTime},autoplay:${data.autoplay},loop:${data.loop},volume: ${data.volume},muted:${data.muted},notificationVisible:${data.notificationVisible}`);},fail: function (data, code) {console.log('getAudioPlayState fail, code=' + code);}});},startPlay() {audio.play();},pausePlay() {audio.pause();},stopPlay() {audio.stop();},seekProress(len) {audio.currentTime = len;},setVolume(value) {audio.volume = value;},setMute(isMuted) {audio.muted = isMuted},setLoop(isloop) {audio.loop = isloop},setStreamType() {if (audio.streamType === 'music') {audio.streamType = 'voicecall'} else {audio.streamType = 'music'}console.error('audio.streamType =' + audio.streamType);},setTitle(title) {console.info('setTitle=' + title);audio.title = title;},setArtist(artist) {console.info('setArtist artist=' + artist) ;audio.artist = artist;},setCover(src) {console.info('setCover src=' + src);  audio.cover = src;}
}

2) 在首页Main的生命周期onShow方法中添加监听audio事件,调用utils.js中的listenAudio,代码如下:

<script>import utils from '../Util/utils.js';module.exports = {onShow(options) {utils.listenAudio();},}
</script>
  1. 在音频Audio页面生命周期onShow方法中添加监听audio事件,调用utils.js中的listenAudio,由于在播放页面需要显示播放进度,单独监听了进度回调事件,代码如下:
onShow(options) {var that = this;utils.listenAudio();audio.ondurationchange = function () {console.log('audio ondurationchange')that.total = audio.durationconsole.log('audio ondurationchange total=' + that.total)}audio.ontimeupdate = function () {that.time = audio.currentTimeconsole.log('ontimeupdate time=' + that.time)}},

欲了解更多详情,请参见:

快应用audio开发指导:

https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-api-audio


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0204411131669010359?fid=18

原作者:Mayism


http://www.ppmy.cn/news/357031.html

相关文章

MP3播放器1.0版本

实现了从服务器当中下载XML文件并且解析XML文件。 package guoximing.download; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;//看的出来 IOException 是MalformedURLException 的父类public c…

mp3 播放器

转自&#xff1a; http://woshizn.javaeye.com/blog/605197  特此收藏&#xff01;&#xff01;&#xff01;&#xff01; "在信息时代&#xff0c;客观障碍已不复存在&#xff0c;所谓障碍都是主观上的。如果你想研发什么新的技术&#xff0c;你不需要几百万美元的资金…

Dewplayer MP3网页播放器

顺便提一下jMP3 &#xff08;javaScript MP3 player&#xff09;&#xff1a;http://www.sean-o.com/jquery/jmp3/ 官网&#xff1a;http://www.alsacreations.fr/dewplayer.html 开源 Dewplayer MP3网页播放器 音乐 Flash Dewplayer是一款不错的flash式MP3播放器[目前只支持M…

MP3播放器完全代码

主窗口代码:(JMFMedia.class) import java.applet.*;import java.awt.datatransfer.*;import java.awt.dnd.*;import java.net.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.Timer;import javax.media.*;import javax.swing.filechoo…

音乐播放器(4)--Mp3歌曲播放与控制

这一篇介绍一下使用java播放Mp3的&#xff0c;这里使用的是一个第三方包(jl.jar)&#xff0c;项目主页http://www.javazoom.net/index.shtml&#xff0c;有了这个包&#xff0c;我们便可以轻松的实现mp3播放了。 1 Mp3播放 首先定义一个播放器接口 package honest.playmusic.i…

HTML5音频(自定义mp3播放器源码)

audio对象 src兼容.ogg .wav .mp3 <audio controls srcdata/imooc.wav></audio> width autoplay loop muted静音 <audio controls srcdata/imooc.wav autoplay loop width500 height500 muted></audio> 播放play() var myAudio new Audio();myAudio.…

点击mp3链接时播放而不下载的问题.

用户点击mp3下载链接经过一次跳转,然后有的机子就提示让下载,有的就提示让播放. 后来找了N多方案均无法解决. 其中 Code System.IO.FileInfo DownloadFile new System.IO.FileInfo(Server.MapPath("test.mp3"));//别的服务器不行. System.Web.HttpContext.Cu…

mpg123播放器的安装与使用

本文非原创&#xff0c;是根据实际操作过程及其遇到的问题&#xff0c;百度后集合几个博主的文章而得&#xff0c;算是一个搬运或集成者&#xff01; 具体步骤如下&#xff1a; 1、找到安装包&#xff1a;http://www.mpg123.de/download/?V1&OD 2、解压&#xff1a; 2.1…