有没有能直接读取系统音乐库的API (HarmonyOS 鸿蒙Next)

有没有能直接读取系统音乐库的API (HarmonyOS 鸿蒙Next) 项目需求,需要读取本地音乐文件数据。安卓是有一个系统共享数据库,能直接读取到音乐的所有数据信息。鸿蒙这边查阅了相关资料,发现要么是遍历文件扫码,要么是根据picker跳转选择获取到uri,然后在根据uri来获取音乐文件的所有信息,这样的化流程太复杂且耗时!

3 回复

采用audioPicker获取公共目录的音频文件,通过fd可以使用基础文件API的fs.readSync接口读取这个文件内的数据

参考一下官方的链接:选择音频类文件

更多关于有没有能直接读取系统音乐库的API (HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这种方式获取到的还是uri,然后还得通过fs.readSync一个个去读,如果用户文件数据多就比较慢,其次还得用户一个个选择。安卓是有一个媒体数据库,直接可以查询出来的,鸿蒙有没有类似的接口呢,

在HarmonyOS(鸿蒙Next)中,可以通过MediaLibrary API直接读取系统音乐库。MediaLibrary是鸿蒙系统提供的媒体库管理接口,支持对音频、视频、图片等媒体文件的访问和操作。

要读取系统音乐库,首先需要获取MediaLibrary实例,然后通过查询条件获取音频文件。以下是一个简单的示例代码:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';

async function getMusicFiles() {
    const media = mediaLibrary.getMediaLibrary();
    const fileKeyObj = mediaLibrary.FileKey;
    const fetchOption = {
        selections: `${fileKeyObj.MEDIA_TYPE}=?`,
        selectionArgs: [mediaLibrary.MediaType.MEDIA_TYPE_AUDIO.toString()],
    };
    const fetchResult = await media.getFileAssets(fetchOption);
    const musicFiles = await fetchResult.getAllObject();
    return musicFiles;
}

在这段代码中,getMediaLibrary()用于获取MediaLibrary实例,FileKeyMediaType用于定义查询条件,getFileAssets()用于获取符合条件的媒体文件,最后通过getAllObject()获取所有音频文件。

需要注意的是,使用MediaLibrary API需要申请相应的权限,例如ohos.permission.READ_MEDIA。确保在应用的config.json文件中声明了这些权限。

回到顶部