Phonegap - 无法播放本地声音文件

问题描述:

我试图用Phonegap播放本地声音文件。这可以在http上正常工作,但不适用于本地文件。我可以看到设备上的文件并手动播放,但无法使用Phonegap的API。我试过了:Phonegap - 无法播放本地声音文件

  1. .mp3和.wav文件格式。
  2. 将文件放入www /(路径为 /android_asset/www/sound.mp3)和/ sdcard /(路径为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。

任何想法?

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

我不认为你可以从资产/ www播放文件,但在SD卡上的文件工作得很好。您需要确保您不会传递FileEntry对象的完整路径。由于媒体播放器插件本身添加了该文件,因此您需要修剪开始路径(file:/// mnt/sdcard /)。我发现在一个小时左右的头部划伤之后!