【鸿蒙南向开发】基于OpenHarmony 4.1 release版本开发的网络音乐播放器

ArkUI 应用媒体 网络与连接
621 0
深开鸿-孙炼 只看该作者 发表于 2024-5-20 16:18:55

前言

在智能设备应用生态中,音乐播放器用户量巨大,用户活跃度非常高。在电子消费领域,主流的音乐播放器都是播放网络音乐的场景,播放本地音乐仅是一个使用率很低的功能。

然而,OpenHarmony 自带的音乐播放器,以及 Sample 仓的示例,都是播放本地音乐的场景,缺少播放网络音乐的开发示例。

因此,本文实现了一个播放网络音乐的音乐播放器应用实例,配合音乐网站服务,就可以进行网络音乐播放。

功能

播放器功能主要包括:

1、从服务器获取歌曲信息(播放器首页)

在这里插入图片描述

2、播放控制(播放详情页)

在这里插入图片描述

3、播放列表

在这里插入图片描述

架构

应用结构及其和服务器的交互关系:

在这里插入图片描述

本例主要实现了网络歌曲播放和信息展示,用户暂不关注。

实现

0、权限

ohos.permission.INTERNET
ohos.permission.KEEP_BACKGROUND_RUNNING

1、歌曲信息查询及展示

歌曲元数据:

export default class AudioItem {
  title: string = '';
  artist: string = '';
  id: string = '0'
  isPlaying: boolean = false;

  constructor(title: string, artist: string, id:string) {
    this.title = title;
    this.artist = artist;
    this.id = id;
  }
}

歌曲列表元数据:

import AudioItem from './AudioItem';

/**
 * List item data entity.
 */
export default class PlayList {
  /**
   * Text of list item.
   */
  title: string;
  /**
   * Image of list item.
   */
  img: Resource;
  /**
   * Other resource of list item.
   */
  others?: string;
  subTitle: string
  list: AudioItem[] = []

  constructor(title: string, img: Resource, subTitle: string, list: AudioItem[], others?: string) {
    this.title = title;
    this.img = img;
    this.others = others;
    this.subTitle = subTitle;
    this.list = list;
  }
}

获取歌曲列表:

import http from '@ohos.net.http'

getListFromServer() {
    this.playLists = [];
    try {
      let httpRequest = http.createHttp()
      httpRequest.request(ServerConstants.ALL_SONGS_URL, (err: Error, data: http.HttpResponse) => {
        if (!err) {
          console.info('HttpResponse Result:' + data.result);
          let aPlayingList: AudioItem[] = Array<AudioItem>();
          const jsonObject: object = JSON.parse(data.result as string);
          Object.keys(jsonObject).forEach((key) => {
            aPlayingList.push(new AudioItem(jsonObject[key].name, jsonObject[key].singer, jsonObject[key].id));
          });
          this.playLists.push(new PlayListData('全部歌曲', $r('app.media.icon'), aPlayingList.length + '首',
            aPlayingList, ''));
        } else {
          console.info('HttpResponse error:' + JSON.stringify(err));
        }
      });
    } catch (err) {
      console.info('HttpRequest error:' + JSON.stringify(err));
    }
  }

展示歌曲列表:

              Grid() {
                ForEach(this.playLists, (item: PlayListData) => {
                  GridItem() {
                    PlayListItem({ item })
                  }
                })
              }
              .margin(12)
              .columnsTemplate('1fr 1fr 1fr')
              .columnsGap(8)
              .rowsGap(12)
              .width('90%')

使用网络 URL 展示歌曲封面:

      Column() {
        Row() {
          Text(this.item.subTitle)
            .fontSize(16)
            .margin(8)
            .fontColor(Color.White)
          Blank()
          Image($r('app.media.ic_public_play_white'))
            .width(20)
            .height(20)
            .margin(8)
        }
        .width('100%')
      }
      .borderRadius(12)
      .backgroundImage(this.item.list.length > 0 ? ServerConstants.SONG_IMAGE_URL + this.item.list[0].id : this.item.img)
      .backgroundImageSize(ImageSize.Cover)
      .width(120)
      .height(120)
      .justifyContent(FlexAlign.SpaceBetween)

2、播放控制,播放器后台任务注册

import media 
<think> 我们正在处理一个关于在OpenHarmony 4.1 release轻量系统下删除`oh_4.1_mini`文件夹的问题。根据之前的对话,用户已经澄清了`oh_4.1_mini`是一个文件夹(可能是OpenHarmony编译环境中的某个目录),而不是Miniconda环境。 参考引用: - 引用[3]提到使用Docker编译环境,获取轻量系统镜像,其中涉及到了OpenHarmony的编译环境。 - 其他引用也围绕OpenHarmony的编译和开发环境。 由于OpenHarmony轻量系统通常运行在资源受限的设备上,可能没有完整的Linux命令集,但删除文件夹的基本命令应该是可用的。考虑到用户是在开发环境中(很可能是Ubuntu系统)操作,而不是在设备上(因为编译通常在开发主机上进行),所以删除文件夹的方法应该与Linux系统中删除目录的方法一致。 然而,用户的问题明确指定了“OpenHarmony 4.1 release轻量系统下”,所以我们有两种理解: 1.OpenHarmony轻量系统(设备上)删除文件夹。 2.开发主机上删除OpenHarmony编译产生的某个文件夹(名为oh_4.1_mini)。 根据引用[3],用户可能是在Docker容器中编译OpenHarmony,那么oh_4.1_mini可能是编译过程中生成的目录。但用户的问题是在轻量系统下,所以更可能是设备上的操作。 但是,轻量系统通常是运行在开发板上的,用户可能通过串口或ADB连接设备。由于轻量系统的文件系统通常是只读的,用户可能无法直接删除系统目录。所以我们需要确认这个目录的性质。 根据问题描述,用户想删除的是一个文件夹,而不是环境。所以我们可以提供两种场景的删除方法: 场景一:在开发主机上(Ubuntu)删除编译生成的目录。 场景二:在OpenHarmony设备上删除某个目录。 由于用户没有明确说明,我们提供两种情况的解决方案。 ### 在开发主机上删除oh_4.1_mini文件夹 如果`oh_4.1_mini`位于开发主机的文件系统中(例如,OpenHarmony源码目录下),则可以使用Linux命令删除。 1. **打开终端**:在Ubuntu系统(开发主机)中打开终端。 2. **定位到目录所在路径**:使用`cd`命令进入包含`oh_4.1_mini`的父目录。例如,如果该目录位于OpenHarmony源码根目录下: ```bash cd /home/ubuntu20-04/OpenHarmony/OH4.1/OpenHarmony-v4.1-Release ``` 3. **确认目录存在**:使用`ls`命令查看: ```bash ls -l oh_4.1_mini ``` 4. **删除目录**:使用`rm`命令删除整个目录(包括子目录和文件): ```bash rm -rf oh_4.1_mini ``` - 注意:`-r`表示递归删除,`-f`表示强制删除(不提示)。请谨慎使用,因为删除后无法恢复。 5. **验证删除**:再次使用`ls`命令检查目录是否被删除。 ### 在OpenHarmony设备上删除oh_4.1_mini文件夹 如果`oh_4.1_mini`位于运行OpenHarmony轻量系统的设备上(如RK3568开发板),则需要通过串口或ADB连接设备,然后使用命令行删除。注意:轻量系统可能使用精简的BusyBox工具集,但通常支持基本的Linux命令。 1. **连接设备**:通过串口或ADB连接到设备。 2. **切换到有权限的目录**:通常用户目录(如`/data`)可写,系统目录可能只读。如果目录位于只读分区,则需要先以读写方式重新挂载分区(需要root权限)。 3. **定位到目录**:使用`cd`命令进入父目录,例如: ```bash cd /path/to/oh_4.1_mini_parent ``` 4. **删除目录**:使用`rm`命令: ```bash rm -rf oh_4.1_mini ``` - 如果权限不足,可能需要使用`su`切换到root用户(如果设备支持)。 - 如果目录位于只读文件系统,需要重新挂载为读写模式: ```bash mount -o remount,rw / # 重新挂载根文件系统为读写(谨慎操作) ``` 5. **验证删除**:使用`ls`命令检查。 ### 注意事项 - **权限问题**:确保执行删除操作的用户对该目录有写权限。 - **系统目录**:不要随意删除系统关键目录,以免破坏系统功能。 - **备份**:删除前建议备份重要数据。 ### 相关问题 1. 如何获取OpenHarmony设备上的root权限? 2. 如何在OpenHarmony设备上挂载文件系统为读写模式? 3. 如何恢复被误删的OpenHarmony系统文件? </think> ### 在OpenHarmony 4.1 Release轻量系统下删除`oh_4.1_mini`文件夹的方法 根据您的需求(在OpenHarmony轻量系统下操作)和上下文引用[^2][^3],`oh_4.1_mini`可能是编译环境目录或Docker镜像缓存。以下是针对不同场景的删除方法: --- #### **场景1:在本地Ubuntu开发环境中删除** 适用于引用[^3]描述的Docker编译环境: ```bash # 进入OpenHarmony源码目录 cd /home/ubuntu20-04/OpenHarmony/OH4.1/OpenHarmony-v4.1-Release # 强制删除文件夹及内容(谨慎操作!) sudo rm -rf oh_4.1_mini # 验证删除结果 ls -l | grep oh_4.1_mini # 应无输出 ``` --- #### **场景2:在Docker容器内删除** 若目录在Docker环境中(引用[^3]): ```bash # 列出运行的容器 sudo docker ps # 进入容器(假设容器名为oh_mini) sudo docker exec -it oh_mini /bin/bash # 在容器内删除目录 rm -rf /path/to/oh_4.1_mini # 退出容器 exit ``` --- #### **场景3:在RK3568设备上删除(轻量系统)** 适用于引用[^2]的硬件平台: ```bash # 通过串口或ADB连接设备 adb shell # 或使用串口工具 # 挂载系统为可读写(默认只读) mount -o remount,rw / # 删除目标目录(假设路径为/system/oh_4.1_mini) rm -rf /system/oh_4.1_mini # 还原只读模式(重要!) mount -o remount,ro / ``` --- ### **关键注意事项** 1. **权限问题**: - Ubuntu环境下使用`sudo` - 设备操作需`remount,rw`挂载 - Docker需进入容器权限[^3] 2. **路径验证**: - 先用`find / -name oh_4.1_mini`定位目录 - 参考编译文档确认标准路径[^3] 3. **安全备份**: ```bash # 建议删除前备份 tar -czvf oh_backup.tar.gz oh_4.1_mini ``` --- ### **相关问题** 1. 如何彻底清理OpenHarmony编译缓存文件? 2. Docker镜像占满磁盘时如何安全清理?[^3] 3. RK3568设备系统分区只读如何永久修改?[^2] 4. 误删系统目录后如何恢复OpenHarmony轻量系统?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值