HarmonyOS鸿蒙Next中应用获取了歌曲的uri并且持久化存储了,每次杀掉应用就需要重新导入

HarmonyOS鸿蒙Next中应用获取了歌曲的uri并且持久化存储了,每次杀掉应用就需要重新导入 如题,我在开发一款AVPlayer的播放应用,我拉起了文件管理,导入了里面的歌曲,获取的Uri每次都是一样的,但是每次我杀掉后台,重新打开应用就需要重新拉起文件管理选择那个歌曲导入,否则不能够获取到歌曲的信息。虽然获取的uri和之前持久化存储的一样但是还是要拉起选择这个歌曲,否则就不能播放,获取不到歌曲的信息。

cke_6757.png

cke_459.png

请问这个是鸿蒙系统的限制么?该怎么解决呢?


更多关于HarmonyOS鸿蒙Next中应用获取了歌曲的uri并且持久化存储了,每次杀掉应用就需要重新导入的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

【解决方案】

如果使用本地资源播放,必须确认资源文件可用,并使用应用沙箱路径访问对应资源,参考获取应用文件路径。应用沙箱的介绍及如何向应用沙箱推送文件,请参考文件管理

下面代码示例中的url仅作示意使用,开发者需根据实际情况,确认资源有效性并设置:

let url = 'https://xxx.xxx.xxx.mp3';
if (avPlayer == null) {
    return;
}
avPlayer.url = url;

代码核心功能: 设置音频播放器的音频源URL。如果播放器实例不存在,则代码直接返回,不执行后续操作。

【背景知识】

AVPlayer:用于音频播放的API,集成了流媒体和本地资源解析、媒体资源解封装、音频解码和音频输出功能。可用于直接播放mp3、m4a等格式的音频文件,不支持直接播放PCM格式文件。播放的全流程包含:创建AVPlayer,设置播放资源,设置播放参数(音量/倍速/焦点模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。支持格式可以参考AVPlayer支持的格式和协议

【问题分析】

在开发过程中每次重新进入开发的应用想要播放已经导入的歌曲时发现无法播放,必须要重新拉起导入。在通过url设置本地资源路径时,使用应用沙箱路径访问本地文件(如entry/src/main/rawfile/test.mp4),需确保资源文件可用并通过沙箱路径正确引用。 注意:AVPlayer没法直接用应用沙箱的路径来播放,需要先获取文件的fd,通过fd来播放音频。

【总结】

可能是资源文件没有被正确引用,建议检查一下引用路径和方法。

更多关于HarmonyOS鸿蒙Next中应用获取了歌曲的uri并且持久化存储了,每次杀掉应用就需要重新导入的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的,

抱歉,您没有提供需要转换的HTML内容。请提供具体的HTML代码,我会按照您的要求将其转换为Markdown格式。

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

你好,我确定是正确引用了uri,如果不拉起文件管理选择用户音频文件,此时这个uri不能用的,获取不到fd。但是如果拉起选择后,那么又可以获取到fd了。我觉得应该是系统限制了。 注明:我两次使用的uri都是一摸一样的:,

应该不是鸿蒙系统的限制,可以参考一下 SweetVideo 里的导入视频,原理应该是一样的。

好的,我看下,

cke_8208.png

这个是我拉起文档资源管理器的方案,可以在里面选音频

cke_150.png

大家看下这个,只要杀掉后台,原来的uri在我圈出的地方就走不通了,必须要重新拉起文件管理区,选择这个uri文件后,这个逻辑才可以走通

还是没有解决这个问题呢,我现在有uri,但是必须要打开拉起用户文件管理器页面,选择那个uri的才可以。

不选择对应uri的音频,那么就无法播放。我这边有uri也不行。但选择了以后,就可以播放。

上面回答中问题分析里提到的通过文件fd播放也没办法解决吗,

这是一个比较奇特的现象,我怀疑是系统的限制,大家如果有经验和想法,可以分享一下

HarmonyOS Next中应用被杀后需重新导入歌曲uri,这是因为系统安全机制限制了应用对持久化存储的直接访问。应用应使用媒体库管理接口(如PhotoViewHelper)来获取媒体文件uri,并通过persistentPermission机制申请长期访问权限。获得授权后,应用可跨会话保留媒体访问权,避免重复导入。需注意权限申请需用户明确授权,且媒体文件未被删除或移动。

这是HarmonyOS Next的安全机制导致的。系统为文件访问提供了临时授权,应用被杀后权限失效,即使URI相同也无法直接访问。建议通过photoAccessHelperfileAccess接口申请持久化权限,保存文件的持久化URI或使用open接口获取可重复使用的文件描述符。这样应用重启后仍能访问同一文件,无需重复导入。

回到顶部