2013-05-22 52 views
0

我想插入背景音頻在我的第一頁上的phonegap應用程序。目前我正在測試這在Android 2.2(在實際的手機上),但最終的應用程序也是爲iOS設計的android phonegap音頻奇怪的問題

我已經使用了各種方法,唯一有一些成功的是通過javascript。我有一個非常奇怪的行爲(至少對我來說)。音頻播放只有如果我點擊按鈕,而不是頁面加載,即使(按鈕和就緒功能)調用相同的功能(playAudio)和頁面加載時,我得到警報,這意味着playAudio功能已成功呼叫。

1)我做錯了什麼?我該如何解決這個問題?有任何想法嗎?

2)爲什麼<嵌入>不適用於Android(它工作得很好,因爲它應該在桌面瀏覽器btw)。 (我用2嵌入測試目的不同的路徑,沒有在Android上工作)這應該是最簡單的方式做背景音頻..

我的意圖是當然要擺脫按鈕,並有音樂在頁面加載時自動播放。

謝謝

這裏是我的代碼:

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
<script src="js/jquery.js"></script> 
<script type="text/javascript" src="phonegap.js"></script> 
<script> 
    $(document).ready(function(){ 
     alert('ready'); 
     playAudio('intro.mp3') 
    }); 

    function playAudio(src) { 
     alert('func::playAudio(src)'); 
     if (device.platform == 'Android') { 
      src = '/android_asset/www/' + src; 
     } 
     var media = new Media(src, success, error_error); 
     media.play(); 
    } 
    function success() { 
     // ignore 
    } 
    function error_error(e) { 
     alert('great error'); 
     alert(e.message); 
    } 
</script> 
</head> 

<body> 
<div class="container-fluid"> 
<button id="button" onclick="playAudio('intro.mp3')"></button> 
<embed name="introAudio" src="intro.mp3" loop="false" hidden="true" autostart="true"> 
<embed name="introAudio2" src="/android_asset/www/intro.mp3" loop="false" hidden="true" autostart="true"> 
</div> 
<script type="text/javascript" src="js/index.js"></script> 
<script type="text/javascript"> 
    app.initialize(); 
</script> 
</body> 

</html> 

回答

1

我可以用你的代碼,並獲得音頻播放加載網頁時沒有點擊一個按鈕。我在Android 4.2和Android 2.2上測試過,沒有任何問題,除了必須刪除playAudio函數中的alert調用外,因爲alert()會阻止JS執行,並停止調用播放媒體,直到對話框關閉。

document.addEventListener('deviceready', onDeviceReady, false); 

function onDeviceReady(){ 
     console.log("Device is ready."); 
     playAudio('intro.mp3'); 
} 
function playAudio(src) { 
     if (device.platform == 'Android') { 
      src = '/android_asset/www/' + src; 
     } 
     var media = new Media(src, success, error_error); 
     media.play(); 
    } 
function success() { console.log("working");} // in your question above, 
      // you have a comment that causes a missing '}' 

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

此代碼可以在兩個設備上正常工作。正如我上面所指出的,在你的問題有代碼,您success方法是無效的,因爲評論隱藏在大括號: function success() { // ignore } 如果你是做 function success() { }那麼它會工作。

編輯:另外,<embed>似乎對我來說都很好。至少,我猜是的,因爲音頻在那裏。你是什​​麼意思「它不起作用?」你期望某種UI控件或什麼?

+0

由'它不工作'我的意思是我沒有聽到任何聲音,直到我按下按鈕,但我希​​望它自動啓動。 我改變了成功功能並刪除了警報。我也注意到你使用'onDeviceReady()'而不是$(document).ready(function()'。我也測試過使用onLoad(來自[link](http://stackoverflow.com/questions/10893322/) )在手機上面的工作仍然沒有,這意味着沒有聲音開始加載。 – user1198170

+0

你在用什麼手機? – MBillau

+0

華爲Ideos X5運行Android 2.2.1 – user1198170