首页 > 其他分享 >基于Harmony OS Next ArkTS API 13实现的网易云音乐App模块代码分析——后台运行模块

基于Harmony OS Next ArkTS API 13实现的网易云音乐App模块代码分析——后台运行模块

时间:2025-01-23 18:32:16浏览次数:1  
标签:ArkTS err wantAgent 长时 App WantAgent LogUtil 模块

虽然音乐播放以及下载的后台应用实现有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

相关文章

  • pyinstaller package fastapi application with Gunicorn
    使用Gunicorn部署FastAPI应用程序:快速而强大的组合https://juejin.cn/post/7348003004123463717本地部署本地开发调试过程中,我通常是这样启动Fastapi服务的在终端中运行:uvicornmain:app--host0.0.0.0--port80当然,也可以python脚本启动:importuvicorn​uvi......
  • SSM安卓日程管理APP 利用SSM实现的Android日程管理应用设计 基于SSM框架的Android日程
    计算机毕业设计SSM安卓日程管理APPqksh9(配套有源码程序mysql数据库论文)本套源码可以先看具体功能演示视频领取,文末有联xi可分享随着移动互联网的飞速发展,人们的生活节奏日益加快,高效的时间管理和日程安排成为提升生活和工作效率的关键。在这样的背景下,开发一款基于SSM框架......
  • Go中私有库的模块要如何Get呢
    背景在go中,模块或者库的拉取通常是使用的git,所以,有时候会出现拉取失败的请况通常我们自己的代码可能是在自己的私有代码仓库,当我们需要拉取自己私有仓库中的模块的时候,会发现无法拉取在公共代码仓库中的模块或者库是私有的,拉取时,会报无法找到解决这里需要依赖三个go中的环......
  • uniapp小程序自定义分享按钮
    <viewclass="icon-item"><viewclass="icon-img"><image:src="`${imgurl}/onlineApplet/applet3/followlist/share.png`"></image></view><viewclass="icon-text">分享主页</vi......
  • rocket.chat 安卓App连接失败 提示websocket在伺服器上未开启
    前言并不是很懂,纯粹瞎搞搞成功的环境前提rocket.chat服务器正常工作,局域网http正常访问nginx反向代理,开启ssl,可以通过https访问web端安卓手机使用App连接服务器手机错误截图解决方法并不是很懂,但是根据网上nginx转发ws的方法在location/块中增加proxy_http_versi......
  • 奶茶外卖 APP 设计与实现
    标题:奶茶外卖APP设计与实现内容:1.摘要奶茶外卖APP的设计与实现旨在为用户提供便捷、高效的奶茶外卖服务。本文介绍了该APP的设计思路和实现方法,包括用户界面设计、订单管理系统、支付系统等。通过实际应用,验证了该APP的可行性和有效性。关键词:奶茶外卖;APP设计;订......
  • JS宏进阶:模块化编程
    理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。然而,理想很丰满,现实很骨感,特别是在WPS编辑器中,加载别人写好的模块需要用eval方法。很不安全,WPS官方又没有开发出独特的加载方式,下面是一个模块的加载示例:varCryptoJS;//.MD5(inputString).toStr......
  • Elasticsearch的mapping设置:enabled, index, doc_values, store, _source到底是什么鬼
    0x00背景介绍最近尝试用ES+Kibana来快速搭建一个全新的可视化平台,有机会仔细阅读了一下ES的文档,发现mapping里有很多设置选项,初次看时令人眼花缭乱,若设置不当,有可能浪费存储空间,也有可能导致无法使用Aggregations,故在此记录一下重点内容。如有错误,恳请点击这里提issue,我会及......
  • 桌面便签备忘录哪个好用?2025六大好用电脑桌面便签app推荐
    在日常工作和生活中,一款好用的桌面便签备忘录软件能够极大地提升我们的效率。它不仅能帮助我们记录重要事项,还能设置提醒,确保我们不会错过任何重要事件。今天,就为大家推荐六款在2025年备受好评的电脑桌面便签app!一、stickynotesWindows系统自带的便签工具,支持用户在桌面上创建......
  • 最新毕设-Django-新能源汽车推荐系统-30063(免费领项目)可做计算机毕业设计JAVA、PHP、
    摘要本论文主要论述了如何基于Django框架开发一个新能源汽车推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,爬取懂车帝的汽车信息,面向对象编程思想进行项目开发。在引言中,作者将论述新能源汽车推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,......