这几天一直在学习android,向着把一些东西记下来,网络是最好的了。
mediaPlayer实现音频的播放
直接看这个图片可以比较的清晰知道应该怎么调用MediaPlayer的一些函数。
这个小实现是实现进度条跟踪的,进度条的跟踪我放在了一个子线程里面
代码:
class progressThread extends Thread{
boolean flag=true;
@Override
public void run() {
super.run();
while(flag){
if(player.isPlaying()) {
progress.setProgress(player.getCurrentPosition()); //实时获取播放音乐的位置并且设置进度条的位置
}
}
}
//下面的函数是外部调用种植线程的,因为现在是不提倡直接带哦用stop方法的
public void stopThread(){
this.flag=false;
}
}
APP播放界面(只是实现了播放以及控制播放的功能,界面还有待优化)
然后就是主程序中的一些代码设置了
一些代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play);
try {
player.setDataSource(main.getAbsolutePath()+"/test.wav"); //获取到音频文件设置MediaPlayer的资源
player.setLooping(false); //只播放一次
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "IO error", Toast.LENGTH_SHORT).show();
}
//MediaPlayer准备资源的监听器
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.e("TAG", "preparing");
}
});
//音频播放完成的监听器
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
Log.e("TAG", "completed!");
//把所有的都回归到0
progress.setProgress(0);
player.seekTo(0);
play_button.setSelected(player.isPlaying());
}
});
//初始化进度条
initProgress();
//I am thinking about use a thread to listen to the progress of the music
//开启进度条跟踪线程
progressThread= new progressThread();
progressThread.start();
//这个是播放和暂停的图标
play_button=findViewById(R.id.start_stop);
//根据当前音乐的播放情况设置这个图标是暂停还是播放中
play_button.setSelected(player.isPlaying());
play_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//控制音频的播放和暂停
if(player.isPlaying()){
player.pause();
}else{
player.start();
}
play_button.setSelected(player.isPlaying());
}
});
private void initProgress() {
progress =findViewById(R.id.progress_bar);
//根据音乐的时长设置进度条的最大进度
progress.setMax(player.getDuration());
progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
player.seekTo(seekBar.getProgress());
//松开之后音乐跳转到相应位置
}
});
}
好了,记录到这里。