6

我正在开发一个带有phonegap的应用程序,我有一个我想播放的声音文件,它位于像www/Sounds/sound.mp3这样的路径中,我正在尝试使用Phonegap的Media对象访问这个文件为了玩它。

我无法弄清楚在使用 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 文件夹,不确定这是否有所作为。

4

6 回答 6

15

这是 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_asset/www/

于 2012-11-14T23:04:29.697 回答
10

用于window.location.pathname获取应用程序的路径。它在 iPhone 上看起来像这样:

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

这在Android上:

/android_asset/www/index.html

去掉/index.html、 prependfile://和 append 你的相对路径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';
于 2012-06-24T07:24:36.917 回答
5

最佳答案已过时。您现在可以使用这种“相对路径”方法在 iOS 上播放wavmp3和格式: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.

于 2015-02-09T01:47:50.280 回答
2

从 Cordova 3.3+ 开始,其他 2 个答案不正确。即使您只是将文件名传递给它,它也应该可以工作。

但是,它只有在文件扩展名为.wav.

这将起作用:

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

这不会:

var media = new Media('recording.mp3', ...);
于 2014-07-15T15:02:41.017 回答
1

我遇到了同样的问题,使用Phone Gap Developer 应用程序,仅关于文件路径的所有答案都对我不起作用。问题在于开发者应用程序没有将文件物理地推送到设备上,从而阻止我以任何方式访问它们。

媒体插件按预期工作

$ phonegap 运行安卓

$ 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();

这会在开发者应用程序上返回错误:

'不能使用来自源 var/mobile/Containers/data/Application/{GUID}/Library/NoCloud/ phonegapdevapp /www/assets/sounds/sound.mp3 的音频文件'

但如果从控制台构建,则可以使用。

详细信息可以在这里找到: https ://forums.adobe.com/thread/2135718

于 2016-08-16T08:10:57.960 回答
0

最好尝试这样做,以考虑任何可能在历史条目中添加目录(“/”)的 HTML5 History API 代码:

function get_phonegap_path () {
 var path = window.location.pathname
 return path.slice(0, path.indexOf("/www/") + 5)
}
于 2014-08-08T12:37:05.853 回答