我正在开发一个带有phonegap的应用程序,我有一个声音文件我想要播放的路径就像www / Sounds / sound.mp3这样的路径,而我正在尝试使用Media对象访问此文件Phonegap是为了播放它。
我无法弄清楚在使用Media对象的javascript文件中访问此声音文件的路径?我尝试过像file:///www/Sounds/sound.mp3,相对路径等路径,我无法访问它。我在xcode 4中一直收到以下错误
Will attempt to use file resource 'file:///www/Sounds/sound.mp3'
Unknown resource 'file:///www/Sounds/sound.mp3'
我需要使用哪条路径来访问该文件?或者我是否需要将声音文件从我的www目录中复制到我的Resources文件夹中并在那里访问它?
引用了我的WWW文件夹,不确定这是否有所作为。
答案 0 :(得分:13)
这是一个改进版的getPhoneGapPath,适用于iOS和Android。它也不仅限于处理文件名长度为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 /
答案 1 :(得分:10)
使用window.location.pathname
获取应用程序的路径。在iPhone上它看起来像这样:
的/ var /移动/应用/ {GUID} / {appname中}。应用程序/网络/ index.html的
这在Android上:
/android_asset/www/index.html
剥离/index.html
,前置file://
,并附加您的相对路径Sounds/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';
答案 2 :(得分:5)
best answer已过时。您现在可以使用此"相对路径"在iOS上播放wav
,mp3
和caf
格式方法:
var media = new Media('beep.wav', ...);
请注意,上述代码要求声音文件位于www/
目录的根目录中 - 在此示例中为www/beep.wav
。如果您想将它们放在像www/sounds/
这样的子目录中,您需要使用相对于www/
目录的路径来指定它。例如,现在也可以使用:
var media = new Media('sounds/beep.wav', ...);
表示www/sounds/beep.wav
的声音文件。
答案 3 :(得分:2)
截至Cordova 3.3+,其他2个答案都不正确。即使你只是传递一个文件名,它也应该有效。
但是,如果文件扩展名为.wav
,仅适用于iOS。
这将有效:
var media = new Media('recording.wav', ...);
这不是:
var media = new Media('recording.mp3', ...);
答案 4 :(得分:1)
我遇到了同样的问题,仅使用手机差距开发者应用,单独使用文件路径的所有答案都不起作用。问题在于开发者应用程序没有将文件物理地推送到设备上,导致我无法以任何方式访问它们。
Media插件使用
按预期工作$ phonegap运行android
$ phonegap run 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();

这会在Developer app上返回错误:
'无法使用来自源var / mobile / Containers / data / Application / {GUID} / Library / NoCloud / phonegapdevapp / www / assets / sounds / sound的音频文件.mp3'
但如果从控制台构建,则有效。
详细信息可以在这里找到: https://forums.adobe.com/thread/2135718
答案 5 :(得分:0)
最好尝试这一点,以考虑可能在历史记录条目中添加目录(“/”)的任何HTML5历史API代码:
function get_phonegap_path () {
var path = window.location.pathname
return path.slice(0, path.indexOf("/www/") + 5)
}