在Android Phonegap应用程序上播放声音
我试着播放mp3文件。如果我在本地Web服务器上更改文件的路径,则此操作有效,但如果我在Android设备上运行此操作,则不会播放声音,也不会显示错误 我很高兴舒尔没有找到mp3文件,但我仍然不知道如何修复它 这是Html在Android Phonegap应用程序上播放声音,android,cordova,Android,Cordova,我试着播放mp3文件。如果我在本地Web服务器上更改文件的路径,则此操作有效,但如果我在Android设备上运行此操作,则不会播放声音,也不会显示错误 我很高兴舒尔没有找到mp3文件,但我仍然不知道如何修复它 这是Html <body> <audio id="successSound" src="/android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<body>
<audio id="successSound" src="/android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<audio id="errorSound" src="/android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio>
<!-- some more UI -->
</body>
是文件结构
phonyapp
`-- www
`-- index.html
|-- sound
| |-- errorSound.mp3
| `-- successSound.mp3
|-- res
`-- spec
编辑1
我试过了
<audio id="successSound" src="sound/successSound.mp3" type="audio/mpeg" ></audio>
这在我的本地Web服务器上的chrome中起作用,但在Android上不起作用
我试过了
<audio id="successSound" src="http://html5multimedia.com/media/sayHello.mp3" type="audio/mpeg" ></audio>
这很有效,但我需要播放本地文件您是否尝试删除代码中的
/android\u资产/www/
部分?你的应用程序就像一个网站,它认为它的根是www文件夹本身
编辑:
我将编辑评论。代码没有以某种方式显示。如果您使用的是本地文件,请尝试使用
src=”引用它们file:///yourpath/sayHello.mp3“
HTML5API提供的播放方法对于播放web上可用的媒体文件非常有用。Phonegap提供媒体插件来播放本地媒体文件。我签出了您的代码,并通过进行以下更改成功地播放了声音。请在你那边查一下
1.将以下行添加到config.xml
<gap:plugin name="org.apache.cordova.media" />
使用此代码
<body>
<audio id="successSound" src="file:///android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<audio id="errorSound" src="file///android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio>
<!-- some more UI -->
</body>
我也遇到了同样的问题,并最终使其正常工作,问题在于我的媒体变量的范围。我的工作原理如下:
(function () {
"use strict";
var media;
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
media = new Media("/android_asset/www/sounds/wat is je wens.mp3", null, function (e) {
alert('Media Error');
alert(JSON.stringify(e));
});
alert('deviceready')
};
function onStart() {
media.play();
alert('yay')
}
};
基本上,我通过在onDeviceReady之外声明媒体变量来确保媒体变量的作用域是全局的,但是在deviceready事件之前没有调用该媒体。尝试以下操作:您的浏览器不支持音频元素。使用媒体对象也适用于我。您的解决方案有效,但我必须提供音频文件的绝对路径。谢天谢地,我必须和netchi做同样的事。这只是一个问题(不使用HTML5音频)
`` // Audio player
//
var my_media = null;
var mediaTimer = null;
// Play audio
//
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");
}
function stopAudio() {
if (my_media) {
my_media.stop();
}
clearInterval(mediaTimer);
mediaTimer = null;
}
// onError Callback
//
function onError(error) {
}
// Set audio position
//
function setAudioPosition(position) {
document.getElementById('audio_position').innerHTML = position;
}
function playAudio(id) {
var audioElement = document.getElementById(id);
var url = audioElement.getAttribute('src');
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();
}
<body>
<audio id="successSound" src="file:///android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>
<audio id="errorSound" src="file///android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio>
<!-- some more UI -->
</body>
(function () {
"use strict";
var media;
document.addEventListener('deviceready', onDeviceReady.bind(this), false);
function onDeviceReady() {
media = new Media("/android_asset/www/sounds/wat is je wens.mp3", null, function (e) {
alert('Media Error');
alert(JSON.stringify(e));
});
alert('deviceready')
};
function onStart() {
media.play();
alert('yay')
}
};
`` // Audio player
//
var my_media = null;
var mediaTimer = null;
// Play audio
//
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");
}
function stopAudio() {
if (my_media) {
my_media.stop();
}
clearInterval(mediaTimer);
mediaTimer = null;
}
// onError Callback
//
function onError(error) {
}
// Set audio position
//
function setAudioPosition(position) {
document.getElementById('audio_position').innerHTML = position;
}