Javascript iOS Phonegap媒体对象-如何访问WWW文件夹中的资源?
我正在用phonegap开发一个应用程序,我有一个声音文件要播放,它位于一个类似于www/Sounds/sound.mp3的路径中,我试图使用phonegap的媒体对象访问这个文件以便播放它 我无法在使用媒体对象的javascript文件中找到访问此声音文件的路径?我试过这样的路,file:///www/Sounds/sound.mp3,相对路径等,我无法访问它。我在xcode 4中不断遇到以下错误Javascript iOS Phonegap媒体对象-如何访问WWW文件夹中的资源?,javascript,ios,xcode,cordova,Javascript,Ios,Xcode,Cordova,我正在用phonegap开发一个应用程序,我有一个声音文件要播放,它位于一个类似于www/Sounds/sound.mp3的路径中,我试图使用phonegap的媒体对象访问这个文件以便播放它 我无法在使用媒体对象的javascript文件中找到访问此声音文件的路径?我试过这样的路,file:///www/Sounds/sound.mp3,相对路径等,我无法访问它。我在xcode 4中不断遇到以下错误 Will attempt to use file resource 'file:///www/S
Will attempt to use file resource 'file:///www/Sounds/sound.mp3'
Unknown resource 'file:///www/Sounds/sound.mp3'
我需要使用什么路径来访问该文件?或者我需要将声音文件从我的www目录复制到我的Resources文件夹中并在那里访问它吗
我的WWW文件夹已被引用,不确定这是否会产生影响。使用
window.location.pathname
获取应用程序的路径。它在iPhone上看起来像这样:
/var/mobile/Applications/{GUID}/{appname}.app/www/index.html
在Android上:
/android_资产/www/index.html
去掉/index.html
,在文件://
前面加上相对路径Sounds/sound.mp3
以下是一些让您开始学习的内容:
演示:
代码:
函数getPhoneGapPath(){
var path=window.location.pathname;
path=path.substr(0,path.length-10);
返回'file://'+路径;
};
var resource=getPhoneGapPath()+'Sounds/sound.mps';
这里有一个修改版的getPhoneGapPath,在iOS和Android上都适用。它还不仅限于处理文件名长度为10个字符的文件:) getPhoneGapPath()将返回: iOS:/var/mobile/Applications/{GUID}/{appName}/www/
Android:/Android\u asset/www/从Cordova 3.3+开始,其他两个答案不正确。即使您只是传递一个文件名,它也应该可以工作 但是,只有当文件扩展名为
.wav
时,它才会在iOS中工作
这将有助于:
var media = new Media('recording.wav', ...);
这不会:
var media = new Media('recording.mp3', ...);
最好将可能添加到带有目录(“/”)的历史条目中的任何HTML5历史API代码考虑在内: 这本书已经过时了。您现在可以使用此“相对路径”方法在iOS上播放
wav
、mp3
和caf
格式:
请注意,上面的代码要求声音文件位于www/
目录的根目录中——在本例中位于www/beep.wav
。如果要将它们放在类似www/sounds/
的子目录中,则需要使用相对于www/
目录的路径来指定它。例如,现在也可以这样做:
var media = new Media('sounds/beep.wav', ...);
对于
www/sounds/beep.wav
上的声音文件,我遇到了同样的问题,使用Phone Gap Developer应用程序时,关于文件路径的所有答案都不适用于我。问题在于开发者应用程序没有将文件物理地推送到设备上,阻止我以任何方式访问它们
媒体插件使用户可以按预期工作
$phonegap运行android
$phonegap运行ios
使用此js代码:
函数getPhoneGapPath(){
var path=window.location.pathname;
var phoneGapPath=path.substring(0,path.lastIndexOf('/')+1);
返回phoneGapPath;
}
var sound=新媒体(getPhoneGapPath()+“资产/声音/声音.mp3”
//...
sound.play();试试
Sounds/sound.mp3
现在应该可以找到这个答案了。这似乎是我见过的最好的方法。谢谢你!在iOS上,我得到了“未知资源”file://var/mobile/Applications/{GUID}/{appname}/www/audio/bounce.mp3'”在android上,它可以工作,但返回路径"file:///android_asset/www/@BenXTan的路径中是否有{GUID}/{appname}
,而不是实际的GUID和实际的应用程序名?android路径是正确的。window.location.pathname只为我提供了“/index.html”,这对我尝试这种方法没有帮助,我得到:`{message:“无法使用资源中的音频文件”file:///var/c…-4B61-91A4-93325E5E75AB/myApp.app/www/song.wav',代码:1}Object``它在Android上工作。稍后我将在iOS系统上测试它。顺便说一句:这个页面也说明了与您几乎相同的事情。但是在iOS系统上,他声明路径是:“。谢谢你的回答,本。这是我在Android和IOS上唯一有效的解决方案。谢谢。如果你在程序中使用HTML5历史API添加带有目录的历史记录条目(使用“/”),这将不起作用。”.最佳解决方案…谢谢BenSo实际的变化是什么?我们不能再在iOS上播放.mp3了?在您的第一个示例中,它会在哪里查找“recording.wav”?在www文件夹中?so var media=new media('sounds/recording.wav',…);如果wav在sounds文件夹中也可以使用?实际上,在查看3.3的文档时,我只能找到一个便条,上面说您不能在iOS上录制.wav以外的任何内容,而不是说您不能播放此类文件。这个答案已过时,请参阅。如果wav对我也不起作用,该怎么办?“无法使用资源中的音频文件”在iOS上,这里没有播放任何东西,无论是mp3还是wav,如果我在浏览器中运行它,它就会工作
function get_phonegap_path () {
var path = window.location.pathname
return path.slice(0, path.indexOf("/www/") + 5)
}
var media = new Media('beep.wav', ...);
var media = new Media('sounds/beep.wav', ...);