【问题标题】:android phonegap audio weird issueandroid phonegap 音频奇怪的问题
【发布时间】:2013-05-23 01:27:44
【问题描述】:

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

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

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

2) 为什么 不能在 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>

【问题讨论】:

    标签: android html cordova audio


    【解决方案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() { } 然后就可以了。

    编辑:另外,&lt;embed&gt; 似乎对我来说都可以正常工作.. 至少,我猜是这样,因为音频在那里。你是什​​么意思“它不起作用?”您是否期望某种 UI 控件或其他东西?

    【讨论】:

    • “它不起作用”是指我在按下按钮之前听不到任何声音,但我希望它自动启动。我更改了成功功能并删除了警报。我还注意到您使用了onDeviceReady() 而不是$(document).ready(function()。我还测试了使用 onLoad(来自 link )。在我的手机上仍然没有上述工作,这意味着加载时没有声音。
    • 运行Android 2.2.1的华为Ideos X5
    • 尝试使用 onDeviceReady() 这是 Cordova(又名 PhoneGap)准备就绪时触发的事件。 HTML/DOM 可能在 Cordova 之前准备好(document.ready())。
    • 确保您也添加了document.addEventListener() 行。
    • @chhameed,您是否在问如何在浏览应用程序、切换视图等时连续播放音乐?就我个人而言,我会尝试将应用程序制作为单页应用程序,然后在后台播放音乐(这将是我能想到的最跨平台的方式。)如果你不能重新设计你的应用程序这个方式,也许你可以启动一个播放音乐的意图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多