1

我尝试制作一个简单的 phonegap 应用程序,可以播放几首歌曲。到目前为止,我的应用程序可以播放歌曲,但是当我点击两次播放按钮时:

 <button onclick="playAudio('test.mp3')">Play Some Audio</button>

它再次播放歌曲,以便可以听到回声,而不是先停止音频然后从歌曲的开头开始。我尝试了一些严重的事情,但是我的停止按钮可以工作。停止音频的 Api 可以在这里找到:http: //docs.phonegap.com/en/2.0.0/cordova_media_media.md.html#media.stop 这是我的停止按钮:

 <button onclick="stopAudio()">Stop Some Audio</button>

和整个项目:

     <body>
     <h1>Playing Audio</h1>
      <button onclick="playAudio('test.mp3')">Play Some Audio</button>
      <button onclick="stopAudio()">Stop Some Audio</button>
      </div>
     <script type="text/javascript" src="cordova-2.4.0.js"></script>
     <script type="text/javascript" src="js/index.js"></script>
     <script type="text/javascript">
        app.initialize();
        function playAudio(src) {
        if (device.platform == 'Android') {
            src = '/android_asset/' + src;
        }

        var media = new Media(src, success, error_error);

        media.play();

    }

    function success() {
        // ignore
    }

    function error_error(e) {
        alert('great error');
        alert(e.message);
    }

    function stopAudio() {
     if (media) {
     var media = new Media(src, success, error_error);
         media.stop();
         }
    }
    </script>
</body>

所以也许有人知道如何使停止按钮工作?对不起,我的英语不好和来自德国的问候!

4

2 回答 2

2

您可以在播放音频时创建一个标志audioPlaying并在每次尝试再次播放音频时检查该标志。这是这里最直接的解决方案。

此外,您正在使用 Media 对象的两个不同实例,当您在其上调用 stop 时,您正在引用一个完全不同的实例。您需要增加媒体对象的范围,见下文:

编辑:添加了 audioPlaying = false; 到停止功能,以防止卡住。

 <body>
 <h1>Playing Audio</h1>
  <button onclick="playAudio('test.mp3')">Play Some Audio</button>
  <button onclick="stopAudio()">Stop Some Audio</button>
  </div>
 <script type="text/javascript" src="cordova-2.4.0.js"></script>
 <script type="text/javascript" src="js/index.js"></script>
 <script type="text/javascript">
    var audioPlaying = false;
    var media;
    app.initialize();
    function playAudio(src) {
        if (audioPlaying === false) {
            if (device.platform == 'Android') {
                src = '/android_asset/' + src;
            }

            media = new Media(src, success, error_error);

            media.play();
            audioPlaying = true;
        } else {
            //audio is already playing
        }
    }

function success() {
    // ignore
}

function error_error(e) {
    alert('great error');
    alert(e.message);
}

function stopAudio() {
 if (media) {
     media.stop();
     audioPlaying = false;
     }
}
</script>

于 2013-05-15T11:43:42.497 回答
1

创建一个全局变量var media;并在单击播放按钮时为其赋值。而不是一次又一次地初始化它

像这样更改您的代码,希望它会起作用。

<body>
     <h1>Playing Audio</h1>
      <button onclick="playAudio('test.mp3')">Play Some Audio</button>
      <button onclick="stopAudio()">Stop Some Audio</button>
      </div>
     <script type="text/javascript" src="cordova-2.4.0.js"></script>
     <script type="text/javascript" src="js/index.js"></script>
     <script type="text/javascript">
        var media;
        app.initialize();
        function playAudio(src) {
        if (device.platform == 'Android') {
            src = '/android_asset/' + src;
        }

        media = new Media(src, success, error_error);

        media.play();

    }

    function success() {
        // ignore
    }

    function error_error(e) {
        alert('great error');
        alert(e.message);
    }

    function stopAudio() {
     if (media) {
         media = new Media(src, success, error_error);
         media.stop();
         }
    }
    </script>
</body>
于 2014-04-05T07:07:56.923 回答