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上播放wav
, mp3
和caf
格式:
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();