mp3audio播放不适用于iOS上的Cordova 3.5

最近我把我们的iOS项目从cordova3.3升级到3.5。

mp3文件(以前下载到iOS标准文件夹中)将不能使用媒体API /插件播放。 这个代码已经在iOS上可靠地工作了很多版本,包括Cordova 3.3 … mp3文件已经被下载到标准的iOS应用“文档”文件夹中的一个名为“Downloads”的子目录中。

在XCode控制台中出现以下错误:

未知资源“文件://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文档目录的audio播放?

或者我只是真的很累,失去了明显的东西…任何build议或信息非常感谢。

克里斯又名weeasle

20/6月14日更新:修复发现。 我现在可以得到我下载的.mp3在iOS Cordova 3.5上播放…显然,随着新的Cordova 3.5文件系统的entry.fullPath方法不再工作,并按照https://github.com entry.toURL()取代/apache/cordova-plugin-file/blob/master/doc/index.md

这在使用Cordova调用图像时工作正常,但是iOS上的媒体插件已经有一段时间了:对于声音播放,它不接受以file://开头的URL。它只接受像/ var这样的绝对path/移动/应用/ {GUID} /文档/

答案和解决方法是使用从fileSystem.root.getDirectory返回的条目中调用的新的toInternalURL()方法。 我使用的确切的电话是downloadDirFullPath = window.appRootDir.toInternalURL(); (从fileSystem.root.getDirectory传递的条目中调用)。

这将返回:cdvfile:// localhost / persistent / Downloads /当预先挂载到.mp3或其他audio文件在iOS中成功播放时

这也适用于显示图像和媒体,所以这是一个单一的可靠的解决schemecordovaiOS 3.5及以上..

这是迄今为止首选的解决scheme,因为它比使用相对path更安全(就像未来的苹果公司在iOS版本中发生重大的文件结构变化,文件访问可能中断一样)…

还有一点需要注意的是,除了上面的调用/方法,downloadDirName = window.appRootDir.name; 还设置cdvfile:// localhost / persistent / basepath

Weeasle

我最近还没有在iOS上玩过媒体,但是如果我看看这个文档,它说:

var myMedia = new Media("audio/beer.mp3") myMedia.play() // first looks for file in www/audio/beer.mp3 then in <application>/documents/tmp/audio/beer.mp3 

所以,如果我是你,我会尝试一下相对path:

 "../Downloads/testsound.mp3" 

这应该改变:

 <application>/documents/tmp/../Downloads/testsound.mp3 

进入只是:

 <application>/documents/Downloads/testsound.mp3 

最新的cordova3.5版本的唯一工作是在那里: http : //www.raymondcamden.com/2014/06/23/Cordova-Media-API-Example

确保安装这个插件:cordova插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git

前缀文件结束工作,让我带我到应用程序内的持久存储位置。 在iOS插件的源代码中,您可以使用这些前缀:

 "documents://" "http://" "https://" "cdvfile://"