要解决Android MediaPlayer没有调用已注册的监听器的问题,可以按照以下步骤进行:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 处理MediaPlayer准备完成事件
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 处理MediaPlayer播放完成事件
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// 处理MediaPlayer错误事件
return false;
}
});
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mediaPlayer.getState() == MediaPlayer.State.PREPARED) {
// 处理MediaPlayer准备完成事件
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (mediaPlayer.getState() == MediaPlayer.State.COMPLETED) {
// 处理MediaPlayer播放完成事件
}
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (mediaPlayer.getState() == MediaPlayer.State.ERROR) {
// 处理MediaPlayer错误事件
}
return false;
}
});
Handler handler = new Handler(Looper.getMainLooper());
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
handler.post(new Runnable() {
@Override
public void run() {
// 处理MediaPlayer准备完成事件
}
});
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
handler.post(new Runnable() {
@Override
public void run() {
// 处理MediaPlayer播放完成事件
}
});
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
handler.post(new Runnable() {
@Override
public void run() {
// 处理MediaPlayer错误事件
}
});
return false;
}
});
通过以上方法,可以确保MediaPlayer在适当的时机调用已注册的监听器,并处理相应的播放事件。