在国外旅行的基本音板上工作。将所有内容设置为在浏览器中正常工作,但希望使用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>
在浏览器中效果很好,但在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>
还尝试使用您建议的代码
<!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>
编辑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>
答案 0 :(得分: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版本。我相信patch notes for 0.2.9可能已经解决了我的问题。
第2步:
版本3.0.0的PhoneGap文档有一个拼写错误,请确保您至少使用3.3.0 documentation,并确保config.xml
中的以下内容无拼写错误:
<feature name="Media">
<param name="android-package" value="org.apache.cordova.media.AudioHandler" />
</feature>
(&#34;媒体&#34;&#34; org.apache.cordova.media.AudioHandler&#34;在3.0.0文档中缺失)
第3步:
如果您因为步骤1中描述的问题而被迫使用CLI版本的PhoneGap(非PhoneGap Build),请务必添加所需的插件。这在documentation:
中有所描述> cordova plugin add org.apache.cordova.media
并将<gap:plugin name="org.apache.cordova.media" />
添加到您的config.xml
第4步:
你需要添加&#34; / android_asset / www /&#34;到您的所有音频文件路径。例如:
new Media('/android_asset/www/' + src);
第5步:
在设备准备就绪后,所有音频加载。例如:
document.addEventListener("deviceready", Game.load);
一旦我做了这些更改,我的音频就开始工作了!祝你好运!
答案 1 :(得分:4)
我认为你应该说“在桌面浏览器中工作得很好”,它更多的是在android默认浏览器中支持媒体而不是phonegap的问题。
根据this page,android浏览器在某些设备上支持mp3,而在其他设备上支持ogg。也许你的问题是你试图在只支持浏览器中媒体的ogg的设备上使用mp3?
使用phonegap media plugin可以解决问题。
文档页面中的完整示例非常清楚。
您只需在页面中复制playAudio
,onSuccess
和onError
功能,然后在想要播放文件时调用playAudio。
您网页的HTML可能如下所示:
<button class="button" id="btnYes">Yes</button>
<button class="button" id="btnNo">No</button>
和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插件
路径audio/basic/yes.mp3
假定该文件位于SD卡根目录的音频文件夹中。
如果音频文件夹位于phonegap www文件夹中,请使用/android_asset/www/audio/basic/yes.mp3
。
答案 2 :(得分:1)
这真的很难和令人困惑......但我终于做到了!
这正是我所做的:
的index.html
<audio id="successSound" src="sounds/sayHello.mp3" type="audio/mpeg" ></audio>
<button onclick="playAudio('successSound')">Play successSound local</button>
的AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
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
<feature name="Media">
<param name="android-package" value="org.apache.cordova.media.AudioHandler" />
</feature>
它最终有效! :D uhuuuuu
答案 3 :(得分:1)
这可能是内容安全问题,请在index.html中尝试使用此标头。
在我的测试项目中,包含或排除它会创建或中断音频播放并使用$.get()
或类似内容读取本地文件
<meta http-equiv="Content-Security-Policy" content="default-src 'self' http://appvipswi.easwi.it; script-src 'self' 'unsafe-inline'; media-src 'self'">
答案 4 :(得分:0)
如果您正在编译云端构建,
只需在index.html中添加以下行
即可<script type="text/javascript" src="phonegap.js"></script>
注意:无需包含源phonegap.js,同时将添加编译build phonegap.js。
还在config.xml中包含媒体插件:
如果平台是Android,如果媒体存在于root中,那么媒体网址必须是: /android_asset/www/test.mp3
答案 5 :(得分:0)
声音文件路径问题。
而不是/android_asset/www/audio/AudioFile2.mp3
试
/android_asset/www/default/audio/AudioFile2.mp3
我发现您的共享代码中的所有其他设置都是正确的。
答案 6 :(得分:0)
以上都不对我有用。我必须更改文件扩展名。 这是有效的方法。
<audio id="a3" controls="controls">
<source id="s3" src="mp3.audio" type="audio/mp3" />
</audio>
我什至不必指定/ android_asset / www /