1

我正在尝试使用 Phonegap 播放本地声音文件。这在 http 上运行良好,但不适用于本地文件。我可以看到设备上的文件并手动播放它们,但不能使用 Phonegap 的 API 这样做。我试过了:

  1. .mp3 和 .wav 文件格式。
  2. 将文件放在 www/ (带有 path /android_asset/www/sound.mp3)和 /sdcard/ (带有 path sound.mp3)中。
  3. 改变协议(有或没有 file://)。

但似乎没有任何效果,成功和错误回调都没有被调用。在尝试播放之前,我还要确保该文件确实存在。这是我的代码:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {

                        var directoryReader = fs.root.createReader();
                        directoryReader.readEntries(function(entries) {
                            for (var i=0; i<entries.length; i++) {
                                if (entries[i].isFile && entries[i].name.match(/.*\.wav$/)){

                                    var audio = new Media(entries[i].toURL().substr(19), function(){console.log('success');}, function(){console.log('error');});
                                    console.log("!!!!! " + audio.getDuration());
                                    audio.play();
                                    audio.release();    
                                    break;
                                }
                            }
                        }, function (error) {
                            alert(error.code);
                        })
                   }, function (error) {
                           alert(error.code);
                   });

audio.getDuration总是返回 -1。我在运行 Android 2.3.3 的 Android Nexus S 上使用 Phonegap 1.9,该应用针对 API 级别 2.1。

有任何想法吗?

4

1 回答 1

2

getDuration同步调用时返回 -1。您需要在 setInterval 循环中调用它,如下所示http://docs.phonegap.com/en/1.9.0/cordova_media_media.md.html#media.getDuration以获得正确的持续时间。

我不认为你可以从 assets/www 播放文件,但 sdcard 上的文件工作得很好。您需要确保不传递 FileEntry 对象的完整路径。您需要修剪起始路径(file:///mnt/sdcard/),因为媒体播放器插件会自行添加。我在挠头一个小时左右后发现了这一点!

于 2012-07-19T14:47:58.060 回答