2013-05-22 53 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