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

Bra*_*cal 5 javascript xcode ios cordova

我正在开发一个带有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'
Run Code Online (Sandbox Code Playgroud)

我需要使用什么路径来访问该文件?或者我是否需要将声音文件从我的www目录中复制到我的Resources文件夹中并在那里访问它?

引用了我的WWW文件夹,不确定这是否有所不同.

Ben*_*Tan 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';
Run Code Online (Sandbox Code Playgroud)

getPhoneGapPath()将返回:

iOS:/var/mobile/Applications/{GUID}/{appName}/www /

Android:/android_asset/www /

  • 这是唯一适用于Android和IOS的解决方案.谢谢. (2认同)

Thi*_*iff 10

使用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';
Run Code Online (Sandbox Code Playgroud)


sly*_*ete 5

最佳答案是过时的.你现在能玩wav,mp3caf使用这种"相对路径"的方法iOS的格式:

var media = new Media('beep.wav', ...);
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码要求声音文件位于www/目录的根目录中 - 在此示例中为www/beep.wav.如果要将它们放在子目录中www/sounds/,则需要使用相对于www/目录的路径指定它.例如,现在也可以使用:

var media = new Media('sounds/beep.wav', ...);
Run Code Online (Sandbox Code Playgroud)

对于声音文件www/sounds/beep.wav.


Alo*_*kin 2

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

但是,如果文件扩展名是.wav.

这将起作用:

var media = new Media('recording.wav', ...);
Run Code Online (Sandbox Code Playgroud)

这不会:

var media = new Media('recording.mp3', ...);
Run Code Online (Sandbox Code Playgroud)