【发布时间】:2015-04-14 19:48:25
【问题描述】:
我正在使用以下代码从服务器播放 mp3 音频。它工作正常,没有问题。但有时当点击播放按钮时,启动音频需要几秒钟,这需要一些缓冲时间,如果我一次又一次地点击播放按钮,那么应用程序就会崩溃。 如何在播放按钮代码下设置条件以检查音频是否已被缓冲并开始播放?我不能在这里检查 if(mediaPlayer.isPlaying())。
private void playAudio(String url) throws Exception
{
if( (mediaPlayer == null || isCompleted) && !isPaused ) {
isCompleted = false;
isPaused = false;
playpauseButton.setBackgroundResource(R.drawable.pauseimage);
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}
else if ( isPaused ) {
playpauseButton.setBackgroundResource(R.drawable.pauseimage);
mediaPlayer.start();
isPaused = false;
}
else {
playpauseButton.setBackgroundResource(R.drawable.playimage);
isPaused = true;
mediaPlayer.pause();
}
mediaPlayer.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
isCompleted = true;
isPaused = false;
playpauseButton.setBackgroundResource(R.drawable.playimage);
}}
);
}
public void stopAudio(View view) {
killMediaPlayer();
}
@Override
protected void onDestroy() {
super.onDestroy();
killMediaPlayer();
}
private void killMediaPlayer() {
isPaused = false;
isCompleted = true;
playpauseButton.setBackgroundResource(R.drawable.playimage);
if(mediaPlayer!=null) {
try {
mediaPlayer.release();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
如果您正在播放 mp3,请确保使用
prepareAsync,然后setOnPreparedListener应该可以工作 -
没有串流,直接播放录制的.mp3音频文件。
-
代替 mediaPlayer.prepare();如果我使用 mediaPlayer.prepareAsync();然后出现 Amine Chikhoui 提到的对话框。但是,当这个对话框出现时,如果我点击视图,那么对话框就会消失,这是不应该的。
-
This question 可以帮助你解决这个问题。
-
我通过 mProgressDialog.setCanceledOnTouchOutside(false) 修复了它;
标签: android