HTML5音频无法在PhoneGap App中播放(可以使用Media?)

在国外旅行的基本音板上工作。 设置一切在浏览器中工作正常,但希望使用PhoneGap Build / GitHub使其可下载,因为单元服务将不可用。

桌面浏览器中的一切都很好,但是一旦安装在Android上,mp3文件就无法播放。 我在这里读了一些关于PhoneGap上mp3的不一致的post。 一些建议使用“媒体”代替。 我不知道如何交换它代替我现在的代码。 似乎使用javascript而不仅仅是html。 http://docs.phonegap.com/en/2.0.0/cordova_media_media.md.html#Media我正在使用的示例:

    

适用于浏览器,但不适用于Android。 任何人都可以提供一个纠正音频的起点吗?

谢谢-BR

编辑2-9-14

到目前为止没有运气。 媒体插件显示正确安装并包含cordova.js。 这是我尝试过的。

    Media Example    function playAudio(url) { // Play the audio file at url var my_media = new Media(url, // success callback function() { console.log("playAudio():Audio Success"); }, // error callback function(err) { console.log("playAudio():Audio Error: "+err); }); // Play audio my_media.play(); }    Yes   

还尝试使用您建议的代码

    Transactions   var my_media = null; var mediaTimer = null; function playAudio(src) { // Create Media object from src my_media = new Media(src, onSuccess, onError); // Play audio my_media.play(); // Update my_media position every second if (mediaTimer == null) { mediaTimer = setInterval(function () { // get my_media position my_media.getCurrentPosition( // success callback function (position) { if (position > -1) { setAudioPosition((position) + " sec"); } }, // error callback function (e) { console.log("Error getting pos=" + e); setAudioPosition("Error: " + e); }); }, 1000); } } // onSuccess Callback function onSuccess() { console.log("playAudio():Audio Success"); } // onError Callback function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); }     document.addEventListener("deviceready", function () { $("#Yes").on("click", function () { playAudio(audio/basic/yes.mp3); }); $("#No").on("click", function () { playAudio(audio/basic/no.mp3); });     

编辑2/10/14

不幸的是仍然没有这样的运 最近的更新如下

    Transactions    document.addEventListener("deviceready", function () { $("#yes").on("click", function () { playAudio(/android_asset/www/audio/basic/yes.mp3); }); $("#no").on("click", function () { playAudio(/android_asset/www/audio/basic/no.mp3); }); }, false); var my_media = null; var mediaTimer = null; function playAudio(src) { // Create Media object from src my_media = new Media(src, onSuccess, onError); // Play audio my_media.play(); } // onSuccess Callback function onSuccess() { console.log("playAudio():Audio Success"); } // onError Callback function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); }          

我整个星期都在敲我的头,我终于让Media工作了! 有很多陷阱:

根据Geevan的回答,您的页面上需要

步骤1:

您需要使用org.apache.cordova.media版本0.2.9或更高版本(我使用的是0.2.11)。 在撰写本文时,PhoneGap Build仅支持0.2.8版本。 我相信0.2.9的补丁说明可能已经解决了我的问题。

第2步:

版本3.0.0的PhoneGap文档有一个拼写错误,请确保您至少使用3.3.0文档 ,并确保config.xml中的以下内容是无拼写错误:

    

(3.0.0文档中缺少“org.apache.cordova.media.AudioHandler”中的“media”一词)

第3步:

如果由于步骤1中描述的问题而被迫使用CLI版本的PhoneGap(非PhoneGap Build),请确保添加所需的插件。 这在文档中描述:

 > cordova plugin add org.apache.cordova.media 

并将config.xml

步骤4:

您需要在所有音频文件路径中添加“/ android_asset / www /”。 例如:

 new Media('/android_asset/www/' + src); 

第5步:

在设备准备好进行所有音频加载。 例如:

 document.addEventListener("deviceready", Game.load); 

一旦我做了这些更改,我的音频就开始工作了! 祝你好运!

我认为你应该说“在桌面浏览器中工作得很好”,它更多的是在android默认浏览器中支持媒体而不是phonegap的问题。

根据这个页面 ,android浏览器在某些设备上支持mp3,而在其他设备上支持ogg。 也许你的问题是你试图在设备上使用mp3只支持浏览器中的媒体ogg?

使用phonegap媒体插件应该可以解决问题。

文档页面中的完整示例非常清楚。 您只需要在页面中复制playAudioonSuccessonError函数,然后在想要播放文件时调用playAudio。

您网页的HTML可能如下所示:

   

和javasctipt(使用jquery):

 document.addEventListener("deviceready", function () { $("#btnYes").on("click", function () { playAudio(audio/basic/yes.mp3); }); $("#btnNo").on("click", function () { playAudio(audio/basic/no.mp3); }); }, false); var my_media = null; var mediaTimer = null; function playAudio(src) { // Create Media object from src my_media = new Media(src, onSuccess, onError); // Play audio my_media.play(); } // onSuccess Callback function onSuccess() { console.log("playAudio():Audio Success"); } // onError Callback function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); } 

对playAudio的调用也可以直接在html中进行onclick,但我更喜欢使用jquery只在phonegap准备好后才开始收听点击。

别忘了包含cordova.js,如果你正在使用phonegap 3.x,请不要忘记安装org.apache.cordova.media插件

编辑:

path audio/basic/yes.mp3假定该文件位于SD卡根目录的audio文件夹中。

如果音频文件夹位于phonegap www文件夹中,请使用/android_asset/www/audio/basic/yes.mp3。

这真的很难和令人困惑……但我终于做到了!

这正是我所做的:

的index.html

   

AndroidManifest.xml中

    

index.js

 function playAudio(id) { var audioElement = document.getElementById(id); var url = audioElement.getAttribute('src'); var my_media = new Media('/android_asset/www/' + url, // success callback function () { console.log("playAudio():Audio Success"); }, // error callback function (err) { console.log("playAudio():Audio Error: " + err); } ); // Play audio my_media.play(); 

}

plataform /安卓/ RES / xml.config

    

它终于有效了!!! :D uhuuuuu

这可能是内容安全问题,请在index.html中尝试使用此标头。 在我的测试项目中,包含或排除它会使用$.get()或类似内容创建或中断音频播放和读取本地文件

  

如果您正在编译云中的构建,

只需在index.html中添加以下行

  

注意:无需包含源phonegap.js,同时将添加编译build phonegap.js。

还包括config.xml中的媒体插件:

如果平台是Android,如果媒体存在于根,那么媒体url必须是:/android_asset/www/test.mp3

它是一个健全的文件路径问题

而不是/android_asset/www/audio/AudioFile2.mp3

尝试

 /android_asset/www/default/audio/AudioFile2.mp3 

我看到您的共享代码中的所有其他设置都是正确的。