iOS Phonegap媒体对象 – 如何访问WWW文件夹中的资源?

我正在开发一个phonegap的应用程序,我有一个声音文件,我想要播放这样的path如www / Sounds / sound.mp3,我试图访问这个文件使用Phonegap的媒体对象按顺序玩它。

我无法弄清楚在使用Media对象的JavaScript文件中访问这个声音文件的path吗? 我尝试过的path如file:///www/Sounds/sound.mp3,相对path等,我无法访问它。 我不断收到在xcode 4中的以下错误

Will attempt to use file resource 'file:///www/Sounds/sound.mp3' Unknown resource 'file:///www/Sounds/sound.mp3' 

我需要使用什么path来访问文件? 或者,我是否需要将声音文件从我的www目录中复制到我的资源文件夹中并在那里访问?

我的WWW文件夹被引用,不知道这是否有所作为。

从cordova3.3+,其他两个答案是不正确的。 它应该工作,即使你只是传递一个文件名。

但是, 如果文件扩展名是.wav它只能在iOS中工作

这将工作:

 var media = new Media('recording.wav', ...); 

这不会:

 var media = new Media('recording.mp3', ...); 

下面是在iOS和Android上适用于我的getPhoneGapPath的修改版本。 它也不限于只处理文件名为10个字符的文件:)

 getPhoneGapPath: function () { 'use strict'; var path = window.location.pathname; var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1); return phoneGapPath; } var resource = getPhoneGapPath() + 'audio/audio.mp3'; 

getPhoneGapPath()将返回:

iOS: / var / mobile / Applications / {GUID} / {appName} / www /

Android: / android_asset / www /

使用window.location.pathname来获取应用程序的path。 它会在iPhone上看起来像这样:

/var/mobile/Applications/{GUID}/{appname}.app/www/index.html

而这在Android上:

/android_asset/www/index.html

去除/index.html ,预先Sounds/sound.mp3 file:// ,然后追加你的相对pathSounds/sound.mp3

这里有一些让你开始的东西:

演示: http : //jsfiddle.net/ThinkingStiff/chNVY/

码:

 function getPhoneGapPath() { var path = window.location.pathname; path = path.substr( 0, path.length - 10 ); return 'file://' + path; }; var resource = getPhoneGapPath() + 'Sounds/sound.mps'; 

最好的答案是过时的。 您现在可以使用这个“相对path”方法在iOS上播放wavmp3caf格式:

 var media = new Media('beep.wav', ...); 

请注意,上面的代码需要将声音文件放在www/目录的根目录下 – 在本例中是www/beep.wav 。 如果你想把它们放在像www/sounds/这样的子目录中,你需要使用一个相对于你的www/目录的path来指定它。 例如,这现在也适用:

 var media = new Media('sounds/beep.wav', ...); 

对于www/sounds/beep.wav的声音文件。

更好地尝试这一点,以考虑可能添加到具有目录(“/”)的历史条目中的任何HTML5历史API代码:

 function get_phonegap_path () { var path = window.location.pathname return path.slice(0, path.indexOf("/www/") + 5) } 

我有同样的问题,单独的文件path的所有答案不适用于我使用手机差距开发应用程序 。 问题在于开发者应用程序没有将文件实际推送到设备上,从而阻止我以任何方式访问它们。

Media插件按照预期使用

$ phonegap运行android

$ phonegap运行ios

用这个js代码:

 function getPhoneGapPath() { var path = window.location.pathname; var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1); return phoneGapPath; } var sound = new Media(getPhoneGapPath()+"assets/sounds/sound.mp3" //... sound.play();