package com.example.mediaplayer_demo;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import com.example.adapter.MyAdapter;
import com.example.bean.MusicBean;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.R.integer;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
/**
*
* 音乐播放器
*/
public class MainActivity extends Activity implements OnPreparedListener,
OnClickListener {
private ListView list_view;
private ImageView pre;
private ImageView play;
private ImageView next;
private ImageView iamge_music;
private TextView text_name;
private TextView text_time;
private SeekBar seek_bar;
private List<MusicBean> list;
// 定义一个值,,记录当前播放的歌曲,在集合中的索引
private int index = 0;
private MediaPlayer player;
// 定义一个状态值,,记录是否处于暂停状态
private boolean flag = false;
private Timer timer;
private TimerTask task;
private int duration;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
// 获取到的是 毫秒 ...应该格式化
int c = (Integer) msg.obj;
// 格式化--->date.format(new Date(duration));
text_time.setText(date.format(new Date(c)) + "/"
+ date.format(new Date(duration)));
// 进度条随时更新 --->已知:总时长,当前播放时间,最大值1000 > c*1000/duration
seek_bar.setProgress(c * 1000 / duration);
}
};
};
private SimpleDateFormat date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 加载布局
setContentView(R.layout.activity_main);
// 找到控件
findView();
// 展示音乐列表
list = new ArrayList<MusicBean>();
list.add(new MusicBean("歌曲1", Environment.getExternalStorageDirectory()
+ "/a.mp3", R.drawable.a));
list.add(new MusicBean("歌曲2", Environment.getExternalStorageDirectory()
+ "/fade.mp3", R.drawable.b));
list.add(new MusicBean("歌曲3", Environment.getExternalStorageDirectory()
+ "/hua.mp3", R.drawable.c));
list.add(new MusicBean("歌曲4", Environment.getExternalStorageDirectory()
+ "/roar.mp3", R.drawable.d));
list.add(new MusicBean("歌曲5", Environment.getExternalStorageDirectory()
+ "/sugar.mp3", R.drawable.e));
// 给listview适配数据---创建适配器
MyAdapter adapter = new MyAdapter(list, MainActivity.this);
list_view.setAdapter(adapter);
// 创建MediaPlayer对象
player = new MediaPlayer();
// 创建一个计时器
timer = new Timer();
// 创建时间格式化的类
date = new SimpleDateFormat("mm:ss");
// 给上一曲,下一曲,暂停设置点击监听
pre.setOnClickListener(this);
play.setOnClickListener(this);
next.setOnClickListener(this);
// 点击条目播放音乐
list_view.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 给index赋值
index = position;
// 播放音乐
play_Music();
}
});
// 拖动进度条,,歌曲跟着更新
seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 进度发生改变的时候,,,歌曲变化
if (player != null && fromUser) {
//progress*duration/1000
player.seekTo(progress*duration/1000);
}
}
});
//自动下一首
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//播放完成自动下一曲
next();
}
});
}
/**
* 播放音乐的方法
*/
private void play_Music() {
try {
// 重置资源
player.reset();
// 加载音乐资源
player.setDataSource(list.get(index).getPath());
// 准备播放音乐
player.prepareAsync();// 异步
// 准备播放完成的监听
player.setOnPreparedListener(this);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 找控件的方法
*/
private void findView() {
list_view = (ListView) findViewById(R.id.list_view);
pre = (ImageView) findViewById(R.id.pre);
play = (ImageView) findViewById(R.id.play);
next = (ImageView) findViewById(R.id.next);
iamge_music = (ImageView) findViewById(R.id.iamge_music);
text_name = (TextView) findViewById(R.id.text_name);
text_time = (TextView) findViewById(R.id.text_time);
seek_bar = (SeekBar) findViewById(R.id.seek_bar);
}
/**
* 播放完成的监听
*/
@Override
public void onPrepared(MediaPlayer mp) {
// 播放音乐
if (player != null) {
player.start();
// 给歌曲名字赋值,,头像赋值
text_name.setText(list.get(index).getName());
iamge_music.setImageResource(list.get(index).getImage());
// 更改播放按钮的图片
play.setImageResource(R.drawable.pause);
// 更新时间
// 获取歌曲的总时长
duration = player.getDuration();
task = new TimerTask() {
@Override
public void run() {
// 获取到歌曲当前播放的时间
int current = player.getCurrentPosition();
Message msg = Message.obtain();
msg.what = 0;
msg.obj = current;
handler.sendMessage(msg);
}
};
timer.schedule(task, 0, 1000);
}
}
/**
* 点击切换歌曲的按钮监听
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
// 暂停 1.音乐正在播放时候--->暂停 2.歌曲正处于暂停-->2.1已经播放过,,暂停中2.2 压根就没播放过
if (player != null && player.isPlaying()) {
// 暂停
player.pause();
// 更改按钮的图片
play.setImageResource(R.drawable.play);
// 更改状态值
flag = true;
} else {
if (flag) {// 2.1
// 继续播放就可以
player.start();
// 更改按钮的图片
play.setImageResource(R.drawable.pause);
} else {
// 重新加载资源
play_Music();
}
}
break;
case R.id.pre:
// 上一首
pre();
break;
case R.id.next:
// 下一曲
next();
break;
default:
break;
}
}
/**
* 下一曲的方法
*/
private void next() {
index++;
index = index % list.size();
// 重新播放
play_Music();
}
/**
* 上一首的方法
*/
private void pre() {
// 上一曲,,,index--;
if (index <= 0) {
index = list.size();
}
index--;
// 播放歌曲
play_Music();
}
}
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import com.example.adapter.MyAdapter;
import com.example.bean.MusicBean;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.R.integer;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
/**
*
* 音乐播放器
*/
public class MainActivity extends Activity implements OnPreparedListener,
OnClickListener {
private ListView list_view;
private ImageView pre;
private ImageView play;
private ImageView next;
private ImageView iamge_music;
private TextView text_name;
private TextView text_time;
private SeekBar seek_bar;
private List<MusicBean> list;
// 定义一个值,,记录当前播放的歌曲,在集合中的索引
private int index = 0;
private MediaPlayer player;
// 定义一个状态值,,记录是否处于暂停状态
private boolean flag = false;
private Timer timer;
private TimerTask task;
private int duration;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
// 获取到的是 毫秒 ...应该格式化
int c = (Integer) msg.obj;
// 格式化--->date.format(new Date(duration));
text_time.setText(date.format(new Date(c)) + "/"
+ date.format(new Date(duration)));
// 进度条随时更新 --->已知:总时长,当前播放时间,最大值1000 > c*1000/duration
seek_bar.setProgress(c * 1000 / duration);
}
};
};
private SimpleDateFormat date;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 加载布局
setContentView(R.layout.activity_main);
// 找到控件
findView();
// 展示音乐列表
list = new ArrayList<MusicBean>();
list.add(new MusicBean("歌曲1", Environment.getExternalStorageDirectory()
+ "/a.mp3", R.drawable.a));
list.add(new MusicBean("歌曲2", Environment.getExternalStorageDirectory()
+ "/fade.mp3", R.drawable.b));
list.add(new MusicBean("歌曲3", Environment.getExternalStorageDirectory()
+ "/hua.mp3", R.drawable.c));
list.add(new MusicBean("歌曲4", Environment.getExternalStorageDirectory()
+ "/roar.mp3", R.drawable.d));
list.add(new MusicBean("歌曲5", Environment.getExternalStorageDirectory()
+ "/sugar.mp3", R.drawable.e));
// 给listview适配数据---创建适配器
MyAdapter adapter = new MyAdapter(list, MainActivity.this);
list_view.setAdapter(adapter);
// 创建MediaPlayer对象
player = new MediaPlayer();
// 创建一个计时器
timer = new Timer();
// 创建时间格式化的类
date = new SimpleDateFormat("mm:ss");
// 给上一曲,下一曲,暂停设置点击监听
pre.setOnClickListener(this);
play.setOnClickListener(this);
next.setOnClickListener(this);
// 点击条目播放音乐
list_view.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 给index赋值
index = position;
// 播放音乐
play_Music();
}
});
// 拖动进度条,,歌曲跟着更新
seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 进度发生改变的时候,,,歌曲变化
if (player != null && fromUser) {
//progress*duration/1000
player.seekTo(progress*duration/1000);
}
}
});
//自动下一首
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//播放完成自动下一曲
next();
}
});
}
/**
* 播放音乐的方法
*/
private void play_Music() {
try {
// 重置资源
player.reset();
// 加载音乐资源
player.setDataSource(list.get(index).getPath());
// 准备播放音乐
player.prepareAsync();// 异步
// 准备播放完成的监听
player.setOnPreparedListener(this);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 找控件的方法
*/
private void findView() {
list_view = (ListView) findViewById(R.id.list_view);
pre = (ImageView) findViewById(R.id.pre);
play = (ImageView) findViewById(R.id.play);
next = (ImageView) findViewById(R.id.next);
iamge_music = (ImageView) findViewById(R.id.iamge_music);
text_name = (TextView) findViewById(R.id.text_name);
text_time = (TextView) findViewById(R.id.text_time);
seek_bar = (SeekBar) findViewById(R.id.seek_bar);
}
/**
* 播放完成的监听
*/
@Override
public void onPrepared(MediaPlayer mp) {
// 播放音乐
if (player != null) {
player.start();
// 给歌曲名字赋值,,头像赋值
text_name.setText(list.get(index).getName());
iamge_music.setImageResource(list.get(index).getImage());
// 更改播放按钮的图片
play.setImageResource(R.drawable.pause);
// 更新时间
// 获取歌曲的总时长
duration = player.getDuration();
task = new TimerTask() {
@Override
public void run() {
// 获取到歌曲当前播放的时间
int current = player.getCurrentPosition();
Message msg = Message.obtain();
msg.what = 0;
msg.obj = current;
handler.sendMessage(msg);
}
};
timer.schedule(task, 0, 1000);
}
}
/**
* 点击切换歌曲的按钮监听
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
// 暂停 1.音乐正在播放时候--->暂停 2.歌曲正处于暂停-->2.1已经播放过,,暂停中2.2 压根就没播放过
if (player != null && player.isPlaying()) {
// 暂停
player.pause();
// 更改按钮的图片
play.setImageResource(R.drawable.play);
// 更改状态值
flag = true;
} else {
if (flag) {// 2.1
// 继续播放就可以
player.start();
// 更改按钮的图片
play.setImageResource(R.drawable.pause);
} else {
// 重新加载资源
play_Music();
}
}
break;
case R.id.pre:
// 上一首
pre();
break;
case R.id.next:
// 下一曲
next();
break;
default:
break;
}
}
/**
* 下一曲的方法
*/
private void next() {
index++;
index = index % list.size();
// 重新播放
play_Music();
}
/**
* 上一首的方法
*/
private void pre() {
// 上一曲,,,index--;
if (index <= 0) {
index = list.size();
}
index--;
// 播放歌曲
play_Music();
}
}