最近,我将我们的iOS项目从Cordova 3.3升级到3.5。
以前下载到iOS标准文档文件夹中的mp3文件,无法使用Media API /插件进行播放。这段代码在包括Cordova 3.3在内的许多iOS版本上一直可靠地工作... mp3文件已经下载到“documents”文件夹的一个名为“Downloads”的子目录中。
在XCode控制台中,我得到以下错误:
未知资源'file://localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/{App-ID}/Documents/Downloads/testsound.mp3'
在我的代码中(在一些用于File Plugin API的代码块之后),我使用以下方法获取目录:downloadDirFullPath = window.appRootDir.toURL();
为了符合3.5文件API的新更改,我最近将其从downloadDirFullPath = window.appRootDir.fullPath;更改为此方式。
对于Cordova 3.5的Media Plugin API,来自iOS App Documents目录的音频播放是否出现问题???
还是我只是真的很累,错过了一些明显的东西......非常感谢任何建议或信息。
Chris 也就是 weeasle
更新于2024年6月20日: 发现解决方案。我现在可以在iOS Cordova 3.5上播放已下载的.mp3文件......显然,使用新的Cordova 3.5文件系统时,entry.fullPath方法不再起作用,取而代之的是entry.toURL(),参见https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
当调用Cordova的图像时,这样做很好。但是,在iOS上已经有一段时间了Media Plugin出现了问题:对于声音播放,它不接受以file:///开头的URL,而只接受绝对路径,如/var/mobile/Applications/{GUID}/Documents/
答案和解决方案是在从fileSystem.root.getDirectory返回的入口中使用新的toInternalURL()方法。 我使用的确切调用是downloadDirFullPath = window.appRootDir.toInternalURL(); (从fileSystem.root.getDirectory传递的条目调用)。 这将返回:cdvfile://localhost/persistent/Downloads/,将其前缀添加到.mp3或其他音频文件中可在iOS上成功播放。 这对于显示图像和媒体也有效,因此它是Cordova iOS 3.5及以上版本的单一可靠解决方案。 这绝对是首选解决方案,因为它比使用相对路径更安全(如果未来苹果在iOS发布中进行重大文件结构更改,则文件访问可能会中断)...... 另外需要注意的一点是,除了上述调用/方法外,downloadDirName = window.appRootDir.name;还设置了cdvfile://localhost/persistent/基本路径