核心技术
实现播放:
开发-后台播放
Next版本的音乐播放只要应用进入后台,音乐播放就会停止,此时接入系统控制中心,并且申请长时后台任务,保证退出后台之后可以正常播放
我们首先接入控制中心的媒体会话,才可以可以实现音频的后台长时任务播放
媒体会话可以理解为帮助管理操作系统与后台之间的通信
- 新建媒体会话的管理类utiis/AvSessionManager
1 2 3 4 5 6 7 8 9 10 11 12 13
| import AvSession from '@ohos.multimedia.avsession';
// 媒体会话 export class AvSessionManger { static session: AvSession.AVSession // 单例 媒体会话对象 帮助实现 static controller: AvSession.AVSessionController //控制器 static async init(context: Context) { // 拿到会话对象 AvSessionManger.session = await AvSession.createAVSession(context, 'bgPlay', 'audio') AvSessionManger.controller = await AvSessionManger.session.getController() //拿到控制器 } }
|
并在EntryAbility中OnCreate里面初始化
1 2 3 4 5
| onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); AVPlayerManager.init() AvSessionManger.init(this.context) }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| // 开启后台长时任务 static async startBackgroundTask() { // 单例 只要有就不用开启 if (AvSessionManger.session.sessionId) { return // 只要有就不用开启 } try { // want的信息组成 目的是点击播放中心的时候,可以进入应用 let wantAgentInfo: wantAgent.WantAgentInfo = { wants: [ { bundleName: 'com.example.heimacloudmusic', abilityName: 'EntryAbility', } ], //operationType: wantAgent.OperationType.START_ABILITY, actionType: wantAgent.OperationType.START_ABILITY, requestCode: 0, wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG] } const want = await wantAgent.getWantAgent(wantAgentInfo) // 申请长时任务 await backgroundTaskManager.startBackgroundRunning(getContext(), backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK, want ) } catch (error) { AlertDialog.show({ message: error }) }
}
|
在播放单曲时开启后台任务