【发布时间】:2014-06-13 12:30:01
【问题描述】:
最近我将我们的 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 App Documents 目录中的音频播放而损坏???
或者我真的很累并且错过了一些明显的东西......任何建议或信息都非常感谢。
克里斯 又名黄鼠狼
2014 年 6 月 20 日更新:已修复。我现在可以让我下载的 .mp3 文件在 iOS Cordova 3.5 上播放...显然,对于新的 Cordova 3.5 文件系统,entry.fullPath 方法不再有效,并且根据 https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
被 entry.toURL() 替换这在使用 Cordova 调用图像时可以正常工作,但是很长一段时间以来,iOS 上的媒体插件一直存在一个怪癖:对于声音播放,它不接受以 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 及更高版本的单一可靠解决方案..
这是迄今为止首选的解决方案,因为它比使用相对路径更安全(好像未来 Apple 会在 iOS 版本中对文件结构进行重大更改,文件访问可能会中断)...
进一步说明 - 除了上述调用/方法之外,downloadDirName = window.appRootDir.name;还设置 cdvfile://localhost/persistent/ 基本路径
黄鼠狼
【问题讨论】:
-
你是否尝试过一些相对路径,例如:
-
感谢 Watchsche 的即时回复。我只是在编辑问题并看到了您的帖子...不幸的是,我是 ObjC 的新手,并且依赖于 Cordova/Phonegap API...正如在编辑的答案中提到的,我确实尝试过相对寻址 - 一些旧版本的 Cordova 提到相对地址...但没有乐趣...
-
谢谢。很多小事情发生了变化(有时只是为了它)而且它们从未被记录在案。这是我最讨厌 Cordova/Phonegap 的地方