2013-05-15 49 views
1

我试图做一个简单的电话应用程序,其中可以播放几首歌曲。 到目前为止,我的应用程序可以发挥的歌曲,但是当我敲击两次播放按钮:Phonegap,停止音频

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

它会播放歌曲,使回波可以听到,而不是先停止音频,然后从beging歌曲的开始。 我尝试了严重的事情,但我的停止按钮的作品。对于停止音频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> 

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

回答

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> 

+0

您的回答是绝对正确的!但是你有没有发现任何可能的原因,停止音频不工作?下面是一个可用的示例:http://docs.phonegap.com/en/2.7.0/cordova_media_media.md.html#media.stop –

+0

使用提供的代码停止应该可以工作,您正在运行代码:media =新Media()两次。结果你实际上最终做的是在一个对象上调用play并停止在另一个不相关的对象上。通过在两个函数的范围内创建一个实例,stop应该可以工作。很高兴帮助您进一步调试 – Yoda

+0

,不幸的是它不起作用。我还注意到,在播放声音之后,audioPlaying保持为假,以便我只能播放一首歌曲。 –

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>