android 简单的音乐播放器

       在项目开发过程中需要一个简单的音频播放的功能,需求很简单,只需要能够播放一个指定文件夹的全部mp3和wav音频文件就可以,谷歌给我们提供了一套比较完整的API,使得我们可以很简单的写出一个简易的音乐播放器,在android中播放音频文件一般都是使用MediaPlayer类来实现,这个播放器中我们需要有暂停、停止、上一首、下一首等基本按钮。

首先设计一个简单的音乐播放界面

    
界面很简单,也就不多说了

在activity中实现功能。

首先获得xml文件中的控件

 lv = (ListView) findViewById(R.id.lv);  seekBar = (SeekBar) findViewById(R.id.seekBar);modelButton = (Button) findViewById(R.id.model);backButton = (Button) findViewById(R.id.back);pauseButton = (Button) findViewById(R.id.pause);nextButton = (Button) findViewById(R.id.next);nameText = (TextView) findViewById(R.id.name);
绑定监听器

 pauseButton.setOnClickListener(this);backButton.setOnClickListener(this);modelButton.setOnClickListener(this);nextButton.setOnClickListener(this);//进度条监听器   seekBar.setOnSeekBarChangeListener(new MySeekBarListener()); 
扫描一个文件加内所有的音频文件

//获得视频列表private void mp3List(){ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  // File path = Environment.getExternalStorageDirectory();// 获得SD卡路径      System.out.println("path-------》" + path);//File[] files = path.listFiles();// 读取   String musicPath = path + "/Music"; getFileName(musicPath);  //视频列表Log.i(LOG, musicPath);}  SimpleAdapter adapter = new SimpleAdapter(this, musicList, R.layout.sd_list, new String[] { "name" }, new int[] { R.id.mp4 });  lv.setAdapter(adapter);for (int i = 0; i < musicList.size(); i++) {  Log.i(LOG, "list.  name:  " + musicList.get(i));  }lv.setOnItemClickListener(new ListView.OnItemClickListener(){@Overridepublic void onItemClick(AdapterView arg0, View view, int position,long id) {                songNum = position;initMediaPlayer(songNum);}           }); }//仅搜索当前目录下的文件 private void getFileName(String url) {   File files = new File(url);File[] file = files.listFiles();//先判断目录是否为空,否则会报空指针if (files != null) {  for (File f : file) {  String fileName = f.getName();  if (fileName.endsWith(".mp3")||fileName.endsWith(".wav")) {   HashMap map = new HashMap();  String s = fileName.substring(0,fileName.lastIndexOf(".")).toString();  //获取文件的地址musicpath = f.getPath();Log.i(LOG, "文件名mp3或wav::   " + s);   map.put("name", fileName);// map.put("mp3", f.getName());  System.out.println("1111111---" + fileName);musicpathlist.add(musicpath);musicList.add(map);  }  }  }  }
这里在根目录的Music文件夹下面放了几首个,然后查询后缀为.mp3和.wav的音频文件添加到listView中。在adapter中还用到了一个sd_list布局,代码如下:


    
得到音频的列表之后就是使用mediaPlayer对音频进行播放, mediaPlayer提供了很多方法可以让开发者直接调用。

为ListView绑定监控

  lv.setOnItemClickListener(new ListView.OnItemClickListener(){@Overridepublic void onItemClick(AdapterView arg0, View view, int position,long id) {                songNum = position;initMediaPlayer(songNum);}           }); 
初始化mediaPlayer

 private void initMediaPlayer(int songNum){musicname = musicpathlist.get(songNum);	Log.i(LOG, musicname);if (musicname != null) {try {mediaPlayer.reset(); //重置多媒体  //指定音频文件地址mediaPlayer.setDataSource(musicname);//这是一个地址String path = musicpathlist.get(songNum);String Text[] = path.split("/");Log.i(LOG, Text[5]);//设置当前播放文件nameText.setText(Text[Text.length - 1]);Log.i(LOG, "播放");//准备播放mediaPlayer.prepare();start();
//			if (!mediaPlayer.isPlaying()) {
//				mediaPlayer.start();
//				System.out.println("开始播放");
//			}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
实现暂停,下一首,上一首等功能

public void start() {   try {   mediaPlayer.start();//开始播放   //设置进度条长度   seekBar.setMax(mediaPlayer.getDuration()); //发送一个Runnable, handler收到之后就会执行run()方法   handler.post(new Runnable() {  public void run() {  // 更新进度条状态   if (!isStartTrackingTouch) //获取当前播放音乐的位置seekBar.setProgress(mediaPlayer.getCurrentPosition());  // 1秒之后再次发送   handler.postDelayed(this, 1000);  }  });//setOnCompletionListener 当当前多媒体对象播放完成时发生的事件   mediaPlayer.setOnCompletionListener(new OnCompletionListener() {   public void onCompletion(MediaPlayer arg0) {   next();//如果当前歌曲播放完毕,自动播放下一首.   }   });   } catch (Exception e) {   Log.v("MusicService", e.getMessage());   }   }   public void next() { Toast.makeText(getApplicationContext(), "下一首", Toast.LENGTH_SHORT).show();songNum = songNum == musicList.size() - 1 ? 0 : songNum + 1;   initMediaPlayer(songNum);  }   public void back() {   Toast.makeText(getApplicationContext(), "上一首", Toast.LENGTH_SHORT).show();//songNum = songNum == 0 ? musicList.size() - 1 : songNum - 1; songNum = songNum - 1 < 0 ? musicList.size() - 1 : songNum - 1; initMediaPlayer(songNum);  }   public void pause() {   if (mediaPlayer.isPlaying())  {pauseButton.setBackgroundResource(R.drawable.zanting);mediaPlayer.pause();   }else  mediaPlayer.start();   }   public void stop() {   if (mediaPlayer.isPlaying()) {   mediaPlayer.stop();   }   } 
程序的最后要释放mediaPlayer占用的资源

protected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (mediaPlayer != null) {mediaPlayer.stop();//mediaPlayer.release();}}
这样一个简易的音频播放器就实现了。

这是一个非常简单的音乐播放器,在设计中没有使用Service实现后台播放,切换播放模式也还没有实现,但是对于在现在手上的项目来说已经够了,后续的工作慢慢在实现。

最后附上代码。。。
点击打开链接




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部