【问题标题】:iOS Phonegap Media Object - How do I access a resource in the WWW folder?iOS Phonegap 媒体对象 - 如何访问 WWW 文件夹中的资源?
【发布时间】:2012-06-25 21:23:22
【问题描述】:

我正在开发一个带有 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 文件夹被引用,不确定这是否有影响。

【问题讨论】:

  • 试试Sounds/sound.mp3它应该可以工作

标签: javascript ios xcode cordova


【解决方案1】:

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

【讨论】:

  • 它适用于安卓系统。稍后我会在iOS系统上进行测试。顺便说一句:此页面simonmacdonald.blogspot.tw/2012/01/… 也说明了与您的几乎相同的内容。但是在 iOS 系统上,他声明路径是:""。谢谢你的回答,本。
  • 这是唯一在 Android 和 IOS 上都适用于我的解决方案。谢谢。
  • 如果您在程序中使用 HTML5 History API 添加带有目录的历史条目(使用“/”),这将不起作用。
  • 最佳解决方案...谢谢 Ben
【解决方案2】:

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

/var/mobile/Applications/{GUID}/{appname}.app/www/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';

【讨论】:

  • 寻找这个答案已经有几个小时了。这似乎是我见过的最好的方式。谢谢大佬!
  • 在 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”,这没有帮助
  • 当我尝试这种方法时,我得到:``` {消息:“无法使用资源文件中的音频文件:///var/c…-4B61-91A4-93325E5E75AB/myApp.app/ www/song.wav'",代码:1}对象```
【解决方案3】:

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 的声音文件。

【讨论】:

    【解决方案4】:

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

    但是,只有在文件扩展名为 .wav 时,它才能在 iOS 中使用

    这将起作用:

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

    这不会:

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

    【讨论】:

    • 那么实际的变化是什么?我们不能在 iOS 上播放 .mp3 了吗?在你的第一个例子中它会在哪里寻找'recording.wav'?在 www 文件夹?所以 var media = new Media('sounds/recording.wav', ...);如果 wav 在声音文件夹中也可以使用?
    • 实际上在查看 3.3 的文档,我只能找到一个说明,说您不能在 iOS 上录制除 .wav 以外的任何内容,而不是说您不能播放此类文件。
    • 这个答案已经过时了,见here
    • 如果 wav 对我也不起作用怎么办? “无法使用资源中的音频文件”
    • 在 iOS 上,这里没有播放任何东西,无论是 mp3 还是 wav,如果我在浏览器中运行它就可以了
    【解决方案5】:

    我遇到了同样的问题,使用 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

    【讨论】:

      【解决方案6】:

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

      function get_phonegap_path () {
       var path = window.location.pathname
       return path.slice(0, path.indexOf("/www/") + 5)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多