2013-05-22 3 views
0

Я пытаюсь вставить фоновый звук на свою первую страницу в приложении phonegap. В настоящее время я тестирую это на Android 2.2 (на самом телефоне), но окончательное приложение предназначено также для iOSandroid phonegap audio weird issue

Я использовал различные методы, только один из которых имел некоторый успех через 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> 

ответ

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>, похоже, отлично работает для меня на обоих ... по крайней мере, я думаю, это так, поскольку звук был там. Что значит «это не работает?» Вы ожидаете какого-то контроля пользовательского интерфейса или чего-то еще?

+0

«Не работает», я имею в виду, что я не слышу никакого звука, пока не нажму кнопку, но я хочу, чтобы он запускался автоматически. Я изменил функцию успеха и удалил предупреждения. Я также заметил, что вы использовали 'onDeviceReady()' вместо '$ (document) .ready (function()'. Я также тестировал использование onLoad (из [link] (http://stackoverflow.com/questions/10893322/ phonegap-ondeviceready-method-not-get-called)). Все еще не работает на моем телефоне, что означает, что звук не запускается при загрузке. – user1198170

+0

Какой телефон вы используете? – MBillau

+0

Huawei Ideos X5 под управлением Android 2.2.1 – user1198170