HarmonyOS鸿蒙Next中如何实现像qq音乐酷狗音乐的导入逻辑,直接就是音频导入页面,还有筛选全选等操作?

HarmonyOS鸿蒙Next中如何实现像qq音乐酷狗音乐的导入逻辑,直接就是音频导入页面,还有筛选全选等操作? 参考文档:导入本地音乐文件中如何实现像qq音乐酷狗音乐的导入逻辑,直接就是音频导入页面,还有筛选全选等操作,如何实现?

3 回复

【背景知识】

  • DocumentViewPicker文件选择器对象,用来支撑选择和保存各种格式文档。
  • DocumentSelectOptions文档选择选项。
    • 属性multiAuthMode为true时为批量授权模式。
    • 属性mergeMode表示开启聚合视图模式,值为文件聚合类型MergeTypeMode

【解决方案】

参考使用DocumentViewPicker文件选择器,同时设置DocumentSelectOptions中multiAuthMode为true和mergeMode为picker.MergeTypeMode.VIDEO。 注意:目前全选按钮不支持选择图库中的图片。 示例代码:

import { picker } from "@kit.CoreFileKit";
import { common } from "@kit.AbilityKit";
import { BusinessError } from "@kit.BasicServicesKit";

@Entry
@Component
struct Index {
  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;

  build() {
    Column({space:6}){
      Text("选择视频文件")
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(()=>{
          try {
            let documentSelectOptions = new picker.DocumentSelectOptions();
            // 选择文档的最大数目
            documentSelectOptions.maxSelectNumber = 10;
            // 表示支持批量授权模式
            documentSelectOptions.multiAuthMode = true;
            // 视频文件聚合模式
            documentSelectOptions.mergeMode = picker.MergeTypeMode.VIDEO;
            let documentPicker = new picker.DocumentViewPicker(this.context);
            documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
              console.info('DocumentViewPicker.select successfully, documentSelectResult uri: ' + JSON.stringify(documentSelectResult));
            }).catch((err: BusinessError) => {
              console.error(`DocumentViewPicker.select failed with err, code is: ${err.code}, message is: ${err.message}`);
            });
          } catch (error) {
            let err: BusinessError = error as BusinessError;
            console.error(`DocumentViewPicker failed with err, code is: ${err.code}, message is: ${err.message}`);
          }
        })
    }

  }
}

更多关于HarmonyOS鸿蒙Next中如何实现像qq音乐酷狗音乐的导入逻辑,直接就是音频导入页面,还有筛选全选等操作?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可通过Picker组件实现音频导入页面。使用PhotoViewPickerDocumentViewPicker选择音频文件,支持多选和筛选。通过PhotoAccessHelperDocumentAccessHelper访问媒体库,获取音频文件列表。全选功能可通过自定义UI组件结合Picker的选择状态管理实现。

在HarmonyOS Next中实现类似QQ音乐、酷狗音乐的本地音频文件导入、筛选和全选功能,主要涉及文件访问、UI交互和状态管理。以下是核心实现思路:

1. 文件访问与列表获取

使用@ohos.file.fs@ohos.file.picker模块访问设备存储并获取音频文件列表。

  • 文件选择器:通过PhotoViewPickerDocumentViewPicker让用户选择音频文件目录,获取文件URI列表。
  • 文件信息读取:遍历URI列表,使用fs.statSync()获取文件详细信息(如名称、路径、大小、修改时间)。
  • 音频元数据:通过@ohos.multimedia.mediaLibrary@ohos.file.fs读取音频特定属性(如时长、艺术家)。

2. 页面与UI组件

  • 列表展示:使用List组件展示音频文件,每个项目包含复选框、音频图标、名称、大小等信息。
  • 全选/筛选功能
    • 全选:在列表顶部添加复选框,绑定到全选状态,点击时切换所有项目的选中状态。
    • 筛选:通过搜索框(Search组件)或分类按钮(如按格式、时间)过滤列表数据,使用状态变量管理筛选条件。
  • 操作按钮:底部固定栏放置“导入选中”、“取消”等按钮,根据选中状态更新按钮可用性。

3. 状态与交互逻辑

  • 选中状态管理:使用@State@Link装饰器管理数组,记录每个文件是否被选中。全选时更新数组所有状态。
  • 筛选逻辑:在获取文件列表后,根据用户输入(如搜索词)或筛选条件过滤数据,更新列表显示。
  • 性能优化:对于大量文件,使用LazyForEach懒加载列表项,避免界面卡顿。

4. 导入功能实现

  • 文件复制:用户点击导入后,遍历选中文件,通过fs.copyFile()将文件从原路径复制到应用私有目录或指定文件夹。
  • 进度反馈:使用Progress组件显示导入进度,异步处理复制操作避免阻塞UI。
  • 权限处理:确保在module.json5中声明必要的存储权限(如ohos.permission.READ_MEDIA),并在运行时动态申请。

示例代码片段

// 文件选中状态管理
@State fileList: Array<{uri: string, name: string, selected: boolean}> = [];
@State isAllSelected: boolean = false;

// 全选切换函数
toggleSelectAll() {
  this.isAllSelected = !this.isAllSelected;
  this.fileList.forEach(item => item.selected = this.isAllSelected);
}

// 筛选函数(按名称搜索)
filterFiles(keyword: string) {
  // 返回过滤后的列表
  return this.fileList.filter(item => item.name.includes(keyword));
}

注意事项

  • 文件访问需遵循HarmonyOS隐私规范,用户授权后才可操作。
  • 导入大量文件时建议使用异步任务(TaskPool)避免主线程阻塞。
  • 界面设计可参考ListCheckboxSearch等组件的官方文档,确保交互流畅。

通过以上步骤,可构建一个功能完整的本地音频导入页面,实现类似主流音乐应用的交互体验。

回到顶部