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

时间:2012-06-24 06:44:24

标签: javascript ios xcode cordova

我正在开发一个带有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文件夹,不确定这是否有所作为。

6 个答案:

答案 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上播放wavmp3caf格式方法:

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)
}