最近我将我们的 iOS 项目从 Cordova 3.3 升级到 3.5。
mp3 文件(之前下载到 iOS 标准文档文件夹中)将无法使用媒体 API/插件播放。该代码已在 iOS 的许多版本上可靠地工作,包括 Cordova 3.3...mp3 文件已下载到标准 iOS 应用程序“文档”文件夹中名为“下载”的子目录中。
在 XCode 控制台中,我收到以下错误:
未知资源'file://localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/{App-ID}/Documents/Downloads/testsound.mp3'
在我的代码中(在文件插件 API 的几个代码块之后)我使用以下方法获取目录: downloadDirFullPath = window.appRootDir.toURL();
为了符合 3.5 文件 API 的新变化,我最近将其从
downloadDirFullPath = window.appRootDir.fullPath;
Cordova 3.5 的媒体插件 API 是否无法从 iOS 应用程序文档目录播放音频?
或者我只是真的很累并且错过了一些明显的东西......非常感谢任何建议或信息。
克里斯
又名黄鼠狼
2014 年 6 月 20 日更新:已找到修复。我现在可以让我下载的 .mp3 在 iOS Cordova 3.5 上播放...显然,在新的 Cordova 3.5 文件系统中,entry.fullPath 方法不再起作用,而是被 entry.toURL() 取代。https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
使用 Cordova 调用图像时效果很好,但是 iOS 上的媒体插件在相当长一段时间内有一个怪癖:对于声音播放,它不接受以 file:/// 开头的 URL,它只接受像 /var 这样的绝对路径/移动/应用程序/{GUID}/文档/
答案和解决方法是使用从 fileSystem.root.getDirectory 返回的条目中调用的新 toInternalURL() 方法。我使用的确切调用是 downloadDirFullPath = window.appRootDir.toInternalURL(); (从 fileSystem.root.getDirectory 传递的条目调用)。
这将返回: cdvfile://localhost/persistent/Downloads/ ,当前置到 .mp3 或其他音频文件时,它可以在 iOS 中成功播放。
这也适用于显示图像和媒体,因此它是 Cordova iOS 3.5 及更高版本的单一可靠解决方案。
这是迄今为止首选的解决方案,因为它比使用相对路径更安全(就好像将来 Apple 在 iOS 版本中对文件结构进行重大更改一样,文件访问可能会中断)...
进一步说明 - 除了上面的调用/方法之外, downloadDirName = window.appRootDir.name;还设置 cdvfile://localhost/persistent/ 基本路径
Weeasle