把快门声音资源文件放到resource/rawfile目录下,使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放(文件放在resource/rawfile目录下)。参考示例如下:import media from '@ohos.multimedia.media' import { AppUtil } from '@pura/harmony-utils' import { BusinessError } from '@ohos.base' import resourceManager from '@ohos.resourceManager'; class ShutterSound { private count: number = 0 private isSeek: boolean = true // 用于区分模式是否支持seek操作 // 注册avplayer回调函数 private setAVPlayerCallback(avPlayer: media.AVPlayer) { // seek操作结果回调函数 avPlayer.on('seekDone', (seekDoneTime: number) => { console.log(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`) }) // error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程 avPlayer.on('error', (err: BusinessError) => { console.log(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`) avPlayer.reset() // 调用reset重置资源,触发idle状态 }) // 状态机变化回调函数 avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => { switch (state) { case 'idle': // 成功调用reset接口后触发该状态机上报 console.log('AVPlayer state idle called.') avPlayer.release() // 调用release接口销毁实例对象 break case 'initialized': // avplayer 设置播放源后触发该状态上报 console.log('AVPlayer state initialized called.') avPlayer.prepare() break case 'prepared': // prepare调用成功后上报该状态机 console.log('AVPlayer state prepared called.') avPlayer.play() // 调用播放接口开始播放 break case 'playing': // play成功调用后触发该状态机上报 console.log('AVPlayer state playing called.') break case 'paused': // pause成功调用后触发该状态机上报 console.log('AVPlayer state paused called.') avPlayer.play() // 再次播放接口开始播放 break case 'completed': // 播放结束后触发该状态机上报 console.log('AVPlayer state completed called.') avPlayer.stop() //调用播放结束接口 break case 'stopped': // stop接口成功调用后触发该状态机上报 console.log('AVPlayer state stopped called.') avPlayer.reset() // 调用reset接口初始化avplayer状态 break case 'released': console.log('AVPlayer state released called.') break default: console.log(`AVPlayer state ${state} called.`) break } }) } async play() { let avPlayer: media.AVPlayer = await media.createAVPlayer() this.setAVPlayerCallback(avPlayer) let fileDescriptor = await getContext(this).resourceManager.getRawFd('object.mp3') let avFileDescriptor: media.AVFileDescriptor = { fd: fileDescriptor.fd, offset: fileDescriptor.offset, length: fileDescriptor.length } avPlayer.fdSrc = avFileDescriptor } } export default new ShutterSound()
把快门声音资源文件放到resource/rawfile目录下,使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放(文件放在resource/rawfile目录下)。
参考示例如下: