要在Android上播放音频文件并在用户界面上保持更新,可以使用MediaPlayer类和Handler类来实现。以下是一个示例代码:
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private Button playButton;
private boolean isPlaying = false;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
int currentPosition = mediaPlayer.getCurrentPosition();
seekBar.setProgress(currentPosition);
// 每100毫秒更新一次界面
sendEmptyMessageDelayed(0, 100);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = findViewById(R.id.seekBar);
playButton = findViewById(R.id.playButton);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource("audio_file_path"); // 替换为你的音频文件路径
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPlaying) {
mediaPlayer.pause();
playButton.setText("播放");
} else {
mediaPlayer.start();
playButton.setText("暂停");
// 开始播放后,开始更新界面
handler.sendEmptyMessage(0);
}
isPlaying = !isPlaying;
}
});
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
// 移除handler的更新消息
handler.removeCallbacksAndMessages(null);
}
}
上述示例代码使用MediaPlayer类播放音频文件,并使用Handler类每100毫秒更新一次SeekBar的进度条。点击播放按钮时,切换播放状态,并更新按钮的文本。拖动SeekBar时,将音频文件的播放位置设置为SeekBar的进度。在Activity销毁时,释放MediaPlayer并移除Handler的更新消息。请确保在AndroidManifest.xml文件中添加适当的权限和Activity声明。