使用MediaPlayer的简单音乐播放器功能
2016-01-21 22:59
441 查看
简单实现三个功能:
1.播放/暂停
2.上一曲
3.下一曲
1.播放/暂停
2.上一曲
3.下一曲
public class MusicPlayerActivity extends Activity implements OnClickListener,OnPreparedListener,OnCompletionListener,OnErrorListener,OnSeekCompleteListener{ private MediaPlayer mediaPlayer = null; private int isPause = 1; private boolean flag = false; private int index = 0; private List<String> list = null; private String PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath(); private int position = 0; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_mediaplayer); Button bt1 = (Button) findViewById(R.id.bt_music_play_pause); Button bt2 = (Button) findViewById(R.id.bt_music_last); Button bt3 = (Button) findViewById(R.id.bt_music_next); bt1.setOnClickListener(this); bt2.setOnClickListener(this); bt3.setOnClickListener(this); initMediaPlayer(); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.bt_music_play_pause: if(flag){ play(); }else{ pause(); } flag = !flag; break; case R.id.bt_music_last: last(); break; case R.id.bt_music_next: next(); break; default: break; } } private void next() { // TODO Auto-generated method stub if(list.size() == (index + 1) ){ index = 0; }else{ index ++; } start(); } private void last() { // TODO Auto-generated method stub if(0 == index){ index = list.size() - 1; }else{ index --; } start(); } private void pause() { // TODO Auto-generated method stub if(mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition(); mediaPlayer.pause(); isPause = 0; } } private void play() { // TODO Auto-generated method stub start(); } private void start() { // TODO Auto-generated method stub if(mediaPlayer.isPlaying()){ mediaPlayer.stop(); } mediaPlayer.reset(); try { mediaPlayer.setDataSource(PATH + "/" + list.get(index)); mediaPlayer.prepareAsync();//异步准备 } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void initMediaPlayer(){ mediaPlayer = new MediaPlayer();//初始化MediaPlayer mediaPlayer.reset(); mediaPlayer.setOnCompletionListener(this); mediaPlayer.setOnErrorListener(this); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setOnSeekCompleteListener(this); list = new ArrayList<String>(); File[] files = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).listFiles(); for (int i = 0; i < files.length; i++) { if(files[i].isFile() && files[i].getName().endsWith(".mp3")){ list.add(files[i].getName()); } } } /** * 播放当前歌曲完成 */ @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub Log.e("antion=", "onCompletion"); last(); } /** * 准备完成的监听 */ @Override public void onPrepared(MediaPlayer mp) { // TODO Auto-generated method stub Log.e("antion=", "onPrepared"); mp.start(); switch (isPause) { case 0: mediaPlayer.seekTo(position); break; default: break; } isPause = 1; } /** * 发生错误 */ @Override public boolean onError(MediaPlayer mp, int arg1, int arg2) { // TODO Auto-generated method stub Log.e("antion=", "onError"); mp.stop();//将音乐暂停 mp.release();//释放资源 return false; } @Override public void onSeekComplete(MediaPlayer mp) { // TODO Auto-generated method stub Log.e("antion=", "onSeekComplete"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if(mediaPlayer.isPlaying()){ mediaPlayer.stop(); } mediaPlayer.release(); } }
相关文章推荐
- 记录一次面试
- JavaScript基础—闭包,事件
- 15.php原型模式
- 2016/1/21 练习 创建 接口interface 应用implements 类class 并实例化调用
- Linux学习之chkconfig命令
- NoSQL
- CentOS-SVN服务
- JSP中的九大内置对象
- gson处理泛型的问题
- 集合操作(一)ArrayList,LinkedList源码分析
- Servlet包导入
- Day1(2016/1/21)——Beginning
- Ubuntu 服务配置(sysv-rc-conf)
- 读取SD卡中的图片
- Kruskal 算法(最小生成树)
- spring IOC容器
- Cubieboard安装Apache2服务器
- activity传值到fragment
- 程序员必备面试题
- 理解RESTful架构