android phonegap音频奇怪的问题

时间:2013-05-22 09:52:11

标签: android html cordova audio

我正在尝试在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>

1 个答案:

答案 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控件或什么?