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播放指定文件