0

我正在尝试在 phonegap 应用程序的第一页上插入背景音频。目前我正在 Android 2.2(在实际手机上)上对此进行测试,但最终应用程序也适用于 iOS

我使用了各种方法,唯一成功的方法是通过 javascript。我有一个非常奇怪的行为(至少对我来说)。当我单击按钮而不是页面加载时才会播放音频,即使(按钮和就绪函数)都调用相同的函数(playAudio)并且当页面加载时我确实收到警报,这意味着 playAudio 函数已成功调用.

1)我做错了吗?请问我该如何解决?有任何想法吗?

2) 为什么 < embed > 不能在 Android 上工作(它在桌面浏览器上工作得很好,顺便说一句)。(我已经使用 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>
4

1 回答 1

1

我能够使用您的代码并在页面加载时播放音频而无需单击按钮。我在 Android 4.2 和 Android 2.2 上进行了测试,除了必须删除函数中的alert调用外,没有任何问题,因为会阻止 JS 执行并停止播放媒体的调用,直到对话框被关闭。playAudioalert()

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 控件或其他东西?

于 2013-05-22T17:18:34.383 回答