2014-05-15 38 views
0

我有一些問題讓我的音頻播放器在iOS和Android上使用PhoneGap Media插件通過Build 3.1正確工作PhoneGap媒體插件 - 你能檢測何時加載url流?

我有播放和停止按鈕,可以正常播放,但當您播放時有一個輕微的延遲音頻網址加載並凍結操作系統。我可以對付它,因爲它很短暫,所以我想我會在屏幕上彈出一個加載圖標。

我在這裏發佈了幾次試圖讓JS工作,因爲我沒有專家,但現在我已經意識到,我的代碼中沒有什麼東西來檢查音頻是否真的在播放!

playAudio函數加載音頻,然後將播放按鈕設置爲停止按鈕。我認爲function success() {意味着它正在播放,但它實際上意味着它完成播放。

在我的代碼中,當點擊鏈接到音頻時,加載函數會使屏幕上出現一個微調,並且我認爲'成功'會關閉加載程序,因爲實際上發生了什麼是老闆停留在上面賽道結束後離開!

我意識到我需要一種檢測曲目是否實際播放的方法!

我該怎麼做?!?!!

繼承人的功能:

function loadPlay(src, trackName) { 
    loader(); 
    playAudio(src, trackName); 
} 

function loader() { 
     // make a loader spinner appear as track loads 
    $(".loading").addClass("loadingnow"); 
} 

function playAudio(src,trackname) { 
    // for Android 
    if (audioPlaying === false) { 
     if (device.platform == 'Android') { 
      src = '/android_asset/www/' + src; 
     } 
     media = new Media(src, success, error_error); 
     media.play(); 
     //add playing class so play button is replaced with stop button 
     document.getElementById(trackname).parentNode.className="playing"; 
     audioPlaying = true; 
    } else { 
     //audio is already playing 
    } 
} 

function success() { 
    // track isplaying so remove the stop button put play button back 
    $(".playing").removeClass("playing"); 
    // now track is playing remove the loader spinner 
    $(".loading").removeClass("loadingnow"); 

    audioPlaying = false; 
} 

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

function stopAudio() { 
    // stop playing track 
    if (media) { 
     media.stop(); 
     audioPlaying = false; 
    } 
} 

繼承人鏈接到PhoneGap的媒體插件API: http://docs.phonegap.com/en/3.1.0/cordova_media_media.md.html#Media

我需要使用該位?

Media.MEDIA_STARTING = 1; 
Media.MEDIA_RUNNING = 2; 
Media.MEDIA_PAUSED = 3; 
Media.MEDIA_STOPPED = 4; 

回答

5

docs

The following constants are reported as the only parameter to the mediaStatus callback function. 

Media.MEDIA_NONE = 0; 
Media.MEDIA_STARTING = 1; 
Media.MEDIA_RUNNING = 2; 
Media.MEDIA_PAUSED = 3; 
Media.MEDIA_STOPPED = 4; 

mediaStatus回調是在你的Media構造函數中提供一個可選的第三次回調...

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

function status_change(code) { 
    switch (code) : 
    case Media.MEDIA_STOPPED : doSomething(); break; 
} 
0

從我可以告訴,ilovett的回答可能不適合你,因爲doSomething()函數會在另外兩種情況下被調用:

  • 當有人停止音樂與media.stop()
  • 當媒體得到釋放(media.release())在Android(不知道別人,但iOS的習慣稱呼它)。

我這樣做的方式是設置一個變量,以確保函數不會被意外調用。