0
我的音乐应用程序返回java.io.IOException:准备失败:状态= 0x1在第8首mp3音轨播放后或同一曲目播放8次。 我使用了一个标准的PhoneGap媒体API运行声音,下面的代码:Android手机音频应用程序返回java.io.IOException:准备失败:状态= 0x1错误
<!-- language: lang-js -->
// The Audio player
var my_media = null;
var mediaTimer = null;
// duration of media (song)
var dur = -1;
// need to know when paused or not
var is_paused = false;
//Set audio position on page
function setAudioPosition(position) {
$("#audio_position").html(position + " sec");
}
//onSuccess Callback
function onSuccess() {
setAudioPosition(dur);
clearInterval(mediaTimer);
mediaTimer = null;
my_media = null;
is_paused = false;
dur = -1;
}
//onError Callback
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
clearInterval(mediaTimer);
mediaTimer = null;
my_media = null;
is_paused = false;
setAudioPosition("0");
}
function playAudio(src) {
if (my_media === null) {
// ui niceties
$("#media_dur").html("0");
$("#audio_position").html("Loading...");
// Create Media object from src
my_media = new Media(src, onSuccess, onError);
// Play audio
//alert('Playing Audio');
my_media.play();
} else {
if (is_paused) {
// to resume where paused in song: call .play()
is_paused = false;
my_media.play();
}
}
// Update my_media position every second
if (mediaTimer === null) {
mediaTimer = setInterval(function() {
my_media.getCurrentPosition(
// success callback
function(position) {
if (position > -1) {
setAudioPosition(Math.round(position));
// getDuration() can take a few seconds so keep trying
// this could be done a better way, no callback for it
if (dur <= 0) {
dur = my_media.getDuration();
if (dur > 0) {
dur = Math.round(dur);
$("#media_dur").html(dur);
}
}
}
},
// error callback
function(e) {
alert("Error getting pos=" + e);
setAudioPosition("Error: " + e);
}
);
}, 1000);
}
}
//Pause audio
function pauseAudio() {
if (is_paused) return;
if (my_media) {
is_paused = true;
my_media.pause();
}
}
//Stop audio
function stopAudio() {
if (my_media) {
// A successful .stop() will call .release()
my_media.stop();
my_media = null;
}
if (mediaTimer) {
clearInterval(mediaTimer);
mediaTimer = null;
}
is_paused = false;
dur = 0;
}
$('#page-basics').live('pageinit',function(){
$(".pl").live('tap', function() {
var ind = $(".pl").index(this);
var src = "/android_asset/" + ind + ".mp3";
playAudio(src);
});
$("#pauseaudio").live('tap', function() {
pauseAudio();
});
$("#stopaudio").live('tap', function() {
stopAudio();
});
});
我使用\t $试图生活(‘水龙头’,功能(){ \t如果(my_media!= NULL){ \t \t \t my_media.release(); \t \t}还不行 – 2012-02-06 20:21:06
将在http://simonmacdonald.blogspot.com/尝试用你的方法2011/05/using-media-class-in-phonegap.html希望它能起作用! – 2012-02-06 20:34:54
我已根据您的建议编辑了代码,并且“准备失败”错误不再出现。我现在正在处理另一个问题 - 当一个mp3在另一个轨道正在播放时开始,它会导致停止所有媒体(因为media.release()函数被调用)。不过,我需要该应用停止播放当前曲目,然后继续播放下一首曲目,无需用户点击两次。希望你能建议。这里是我目前使用的代码: – 2012-02-08 12:27:49