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

BR8*_*R89 5 html5 android cordova phonegap-build

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

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

<audio id="yes" src="audio/basic/yes.mp3"></audio>
<audio id="no" src="audio/basic/no.mp3"></audio>

<button class="button" onclick="document.getElementById('yes').play()">Yes</button>
<button class="button" onclick="document.getElementById('no').play()">No</button>
Run Code Online (Sandbox Code Playgroud)

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

谢谢-BR

编辑2-9-14

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

<!DOCTYPE HTML>
<html>
  <head>
    <title>Media Example</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    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();
}
    </script>
  </head>
  <body>

  <a href="#" class="button" onclick="playAudio('/android_asset/www/audio/basic/yes.mp3');">Yes</a>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

还尝试使用您建议的代码

<!DOCTYPE html>
<html>
<head>

<title>Transactions</title>

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript">
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');
}

</script>


<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body>



document.addEventListener("deviceready", function () {
$("#Yes").on("click", function () {
    playAudio(audio/basic/yes.mp3);
});
$("#No").on("click", function () {
    playAudio(audio/basic/no.mp3);
});


<button class="button" id="Yes">Yes</button>
<button class="button" id="No">No</button>



</body>

</html>
Run Code Online (Sandbox Code Playgroud)

编辑2/10/14

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

<!DOCTYPE html>
<html> 
<head>

<title>Transactions</title>

<!-- JavaScript -->
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
<script type="text/javascript">


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');
 }
</script>

<!-- CSS -->
<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body>




<button class="button" id="yes">Yes</button>
<button class="button" id="no">No</button>



</body>

</html>
Run Code Online (Sandbox Code Playgroud)

Joh*_*ald 7

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

根据Geevan的回答,您确实需要<script type="text/javascript" src="phonegap.js"></script>在您的页面上.

步骤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:

<feature name="Media">
    <param name="android-package" value="org.apache.cordova.media.AudioHandler" />
</feature>
Run Code Online (Sandbox Code Playgroud)

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

第3步:

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

> cordova plugin add org.apache.cordova.media
Run Code Online (Sandbox Code Playgroud)

并添加<gap:plugin name="org.apache.cordova.media" />到您的config.xml

第4步:

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

new Media('/android_asset/www/' + src);
Run Code Online (Sandbox Code Playgroud)

第5步:

设备准备就绪进行所有音频加载.例如:

document.addEventListener("deviceready", Game.load);
Run Code Online (Sandbox Code Playgroud)

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


Qui*_*Fix 4

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

根据此页面,Android浏览器在某些设备上支持mp3,在其他设备上支持ogg。也许您的问题是您尝试在浏览器中仅支持 ogg 媒体的设备上使用 mp3?

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

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

您页面的 html 可能如下所示:

<button class="button" id="btnYes">Yes</button>
<button class="button" id="btnNo">No</button> 
Run Code Online (Sandbox Code Playgroud)

和 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');
}
Run Code Online (Sandbox Code Playgroud)

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

不要忘记包含 cordova.js,如果您使用 Phonegap 3.x,请不要忘记安装 org.apache.cordova.media 插件

编辑:

路径audio/basic/yes.mp3假定该文件位于 sd 卡根目录下的音频文件夹中。

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