欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【HarmonyOS】鸿蒙应用获取用户设备内音频资源文件

【HarmonyOS】鸿蒙应用获取用户设备内音频资源文件

2025/9/14 15:03:23 来源:https://blog.csdn.net/u010949451/article/details/141113373  浏览:    关键词:【HarmonyOS】鸿蒙应用获取用户设备内音频资源文件

【HarmonyOS】鸿蒙应用获取用户设备内音频资源文件

问题背景:
在HarmonyOS系统中,应用访问用户的媒体库资源(图片和视频),音频资源,文件资源。都需要通过安全组件Picker来访问。

系统封装了选择资源组件Picker。用于桥接应用和用户资源的获取。

此种方式和传统应用开发,Android 和 IOS 是不同的。需要老铁们特别注意。

DEMO示例:
在示例代码中有注释,详细讲解调用步骤:
主要思路是使用系统提供的AudioViewPicker来访问用户的音频资源,当应用选择成功,点击确认后,会通过回调得到文件资源的Uri。

通过文件资源的Uri。进行FS操作,来读写用户音频文件。

import { picker } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';/*** 访问器管理工具*/
export class PickerMgr {private TAG: string = 'PickerMgr';private static mPickerMgr: PickerMgr | null = null;public static Ins(): PickerMgr {if (!PickerMgr.mPickerMgr) {PickerMgr.mPickerMgr = new PickerMgr();}return PickerMgr.mPickerMgr;}/*** 选择用户设备内的所有音频资源*/public selectAudio(context: common.Context, selectNum: number): Promise<Array<string>>{return new Promise((resolve, reject)=>{// 创建音频选择器const audioViewPicker = new picker.AudioViewPicker(context);// 设置音频选择操作参数const audioSelectOptions = new picker.AudioSelectOptions();audioSelectOptions.maxSelectNumber = selectNum;// 向用户唤起系统选择界面audioViewPicker.select(audioSelectOptions).then((audioSelectResult: Array<string>) => {// 文件选择成功后,返回被选中音频的uri结果集。console.info('audioViewPicker.select to file succeed and uri is:' + JSON.stringify(audioSelectResult));resolve(audioSelectResult);}).catch((err: BusinessError) => {// 异常返回console.error(`Invoke audioViewPicker.select failed, code is ${err.code}, message is ${err.message}`);reject(err);})});}
}
import { PickerMgr } from '../../mgr/PickerMgr'
import { common } from '@kit.AbilityKit';
import { fileIo as FS } from '@kit.CoreFileKit';/*** 用户音频选择*/



struct AudioSelectPage {/*** 点击唤起音频选择器*/onSelectUserAudioFile = async ()=>{// 请确保 getContext(this) 返回结果为 UIAbilityContextlet context = getContext(this) as common.Context;let res = await PickerMgr.Ins().selectAudio(context, 1);this.optionAudioFile(res);}/*** 对于音频文件进行文件读写操作* @param uri*/private optionAudioFile(uri: string){// 这里需要注意接口权限参数是 fs.OpenMode.READ_ONLY。只读.let file = FS.openSync(uri, FS.OpenMode.READ_ONLY);console.info('file fd: ' + file.fd);// 读取到系统文件标识符后,就可以针对这个文件进行操作。可以理解为文件在HarmonyOS系统中的ID。let buffer = new ArrayBuffer(4096);let readLen = FS.readSync(file.fd, buffer);console.info('readSync data to file succeed and buffer size is:' + readLen);//读取完成后关闭fd。FS.closeSync(file);}build() {RelativeContainer() {Text("点击唤起音频选择器").fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(this.onSelectUserAudioFile)}.height('100%').width('100%')}
}

使用picker获取的select()返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
使用picker获取的select()返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
使用picker获取的select()返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词