我正在尝试在phonegap应用的第一页上插入背景音频。目前我正在Android 2.2(在实际手机上)测试这个,但最终的应用程序也适用于iOS
我使用了各种方法,唯一一个取得了一些成功的方法是通过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>
答案 0 :(得分:1)
我能够使用您的代码并在页面加载时播放音频,而无需单击按钮。我在Android 4.2和Android 2.2上测试过并没有任何问题,除了必须删除alert
函数中的playAudio
调用,因为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>
似乎对我来说都很好。至少,我猜它确实如此,因为音频在那里。你是什么意思&#34;它不起作用?&#34;你期望某种UI控件或什么?