虽然音乐播放以及下载的后台应用实现有FA模型的Service Ability可以实现,但是目前主推的Stage模型中,后台应用的实现更推荐使用申请长时间应用来实现。
项目地址:Chenlvin/CloudMusic-HarmonyOSNext: 支持鸿蒙5.0的音乐App
相关文档:
@ohos.resourceschedule.backgroundTaskManager (后台任务管理)(系统接口)
@ohos.app.ability.wantAgent (WantAgent模块)
代码如下:
//src/main/ets/common/utils/play/ContinuousTask.ets
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
import { WantAgent, wantAgent } from '@kit.AbilityKit';
import { LogUtil } from '@pura/harmony-utils';
/**
* 长时任务
*/const TAG = '[ContinuousTask] '
class ContinuousTask {
private context: Context = getContext(this)
async startTask() {
let wantAgentInfo: wantAgent.WantAgentInfo = {
wants: [
{
bundleName: "cc.chenlvin.cloudmusic",
abilityName: "EntryAbility"
}
],
actionType: wantAgent.OperationType.START_ABILITY,
requestCode: 0,
actionFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
};
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {
backgroundTaskManager.startBackgroundRunning(this.context,
backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK, wantAgentObj).then(async () => {
LogUtil.info(TAG + `启动长时任务 Start Background Running.`);
}).catch((err: BusinessError) => {
LogUtil.error(TAG + `启动长时任务 Start Background Running 失败:Code - ${err.code}, Message - ${err.message}`);
});
});
}
async stopTask() {
backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
LogUtil.info(TAG + `成功结束长时任务 Stop Background Running.`);
}).catch((err: BusinessError) => {
LogUtil.error(TAG + `结束长时任务 Stop Background Running 失败:Code - ${err.code}, Message - ${err.message}`);
});
}
}
const conTask = new ContinuousTask()
export default conTask as ContinuousTask
启动长时任务的过程:
1.使用wantAgent获取实例的用户ID、获取want信息
2.然后在回调函数中传入获取到的wantAgentObj,使用BackgroundTasksKit.startBackgroundRunning实现申请长时任务并输出日志
模块解释
app.ability.WantAgent模块提供了创建WantAgent实例、获取实例的用户ID、获取want信息、比较WantAgent实例和获取bundle名称等能力。
BackgroundTasksKit模块提供申请后台任务的接口。当应用退至后台时,开发者可以通过本模块接口为应用申请短时、长时任务,避免应用进程被终止或挂起。
关闭长时任务:
使用BackgroundTasksKit.stopBackgroundRunning即可关闭长时任务
用户操作过程以及响应:
1.进入应用,点击播放,退出音乐界面推送至后台执行;
此时调用conTask.startTask
2.再次进入应用,音乐播放进度条显示正常;
3.点击暂停播放,取消长时任务
此时调用conTask.stopTask
调用到的三方库
@pura/harmony-utils 的 LogUtil
这是一个优化过的日志输出组件,能够更加方便地输出自定义格式的日志,方便调试。
标签:ArkTS,err,wantAgent,长时,App,WantAgent,LogUtil,模块 From: https://www.cnblogs.com/ouyangzhiyong/p/18688472