HarmonyOS鸿蒙Next中解决“调用getResourceManager().getRawFileEntry(mp3路径)播放rawfile目录下一个mp3文件,结果却播放了所有文件”
HarmonyOS鸿蒙Next中解决“调用getResourceManager().getRawFileEntry(mp3路径)播放rawfile目录下一个mp3文件,结果却播放了所有文件”
写了段代码想播放rawfile目录下的c.mp3,结果却播放了rawfile目录下所有的文件,代码如下:
RawFileDescriptor filDescriptor = getResourceManager().getRawFileEntry("entry/resources/rawfile/c.mp3").openRawFileDescriptor();
Source source = new Source(filDescriptor);
player.setSource(source);
player.prepare();
player.play();
修改后,ok,只播放c.mp3文件了,代码如下:
RawFileDescriptor filDescriptor = getResourceManager().getRawFileEntry("entry/resources/rawfile/c.mp3").openRawFileDescriptor();
Source source = new Source(filDescriptor.getFileDescriptor(),filDescriptor.getStartPosition(), filDescriptor.getFileSize());
player.setSource(source);
player.prepare();
player.play();
就是把
Source source = new Source(filDescriptor);
改成
Source source = new Source(filDescriptor.getFileDescriptor(),filDescriptor.getStartPosition(), filDescriptor.getFileSize());
照我想,既然在getResourceManager().getRawFileEntry("entry/resources/rawfile/c.mp3")中指定了路径,那么返回的RawFileDescriptor对象应该就只有c.mp3一个文件,但实际不是。debug了filDescriptor.getStartPosition()的返回值,发现是3256446,接近目录中另两个文件a.mp3和b.mp3的大小之和。继而修改代码,播放b.mp3跟踪getStartPosition的数值,发现接近a.mp3的文件大小。
又多试了几个文件,我猜调用getResourceManager().getRawFileEntry时并没有为c.mp3文件数据单独分配内存,系统预先载入了所有rawfile文件,然后调用getResourceManager().getRawFileEntry时返回一个子集,所以才有那个getStartPosition返回值接近字母序前面文件大小和的情况。系统为这些rawfile文件分配了一块内存,每次调用是返回对应的起始位置和大小,并且共用同一个fd或者handle(因为class FileDescriptor 中定义private int fd,就没去验证)。为了一个文件载入所有的,是不是有点浪费啊。
更多关于HarmonyOS鸿蒙Next中解决“调用getResourceManager().getRawFileEntry(mp3路径)播放rawfile目录下一个mp3文件,结果却播放了所有文件”的实战教程也可以访问 https://www.itying.com/category-93-b0.html
请求方式:,
更多关于HarmonyOS鸿蒙Next中解决“调用getResourceManager().getRawFileEntry(mp3路径)播放rawfile目录下一个mp3文件,结果却播放了所有文件”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
sandwich
OpenHarmony 5.0
`keytool -list -v -keystore /Users/admin/Downloads/HmsDemo.jks/build.gradle`
HmsDemo
HmsDemo.jks build.gradle android
HarmonyOS Keyring
开发者版权所有 devsolution@huawei.com
在HarmonyOS鸿蒙Next中,调用getResourceManager().getRawFileEntry(mp3路径)播放rawfile目录下的MP3文件时,如果播放了所有文件,可能是由于路径解析或资源管理器的处理方式问题。确保路径正确且唯一,避免模糊匹配。检查rawfile目录结构,确保MP3文件路径明确。使用getRawFileEntry时,传入的路径应精确指向目标文件,避免通配符或模糊路径。如果问题依旧,考虑使用getRawFileDescriptor或getRawFile方法,直接获取文件描述符或输入流进行播放。
在HarmonyOS鸿蒙Next中,调用getResourceManager().getRawFileEntry(mp3路径)时,如果播放了所有文件而非指定文件,可能是路径解析错误或播放逻辑有误。请检查:
- 确保路径正确,如
"entry/resources/rawfile/yourfile.mp3"; - 确认使用
RawFileDescriptor读取指定文件,而非遍历目录; - 检查播放器是否仅加载指定文件。
正确代码示例如下:
RawFileEntry rawFileEntry = getResourceManager().getRawFileEntry("entry/resources/rawfile/yourfile.mp3");
RawFileDescriptor fd = rawFileEntry.openRawFileDescriptor();
// 使用fd播放指定文件

