安卓MP3播放器开发实例(1)之音乐列表界面

          学习安卓开发有一年了,想想这一年的努力,确实也收获了不少,也找到了比较如意的工作。今天准备分享一个曾经在初学阶段练习的一个项目,通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正规。这个项目是当时借鉴Mars老师的初学视频做的安州手机的MP3播放器,自己又进行了改进,特别在歌词的优化和添加进度条方面的。由于是8个月前做的,水平很初级,bug应该很多,现在自己又懒得再一次改进,只希望能够给初学的朋友们提供一些帮助,或者起到抛砖引玉的效果,那我就心满意足了。

        先总体介绍下这个MP3播放器。很简单,首先是本地列表页面(界面很low,大家不要笑):

       安卓MP3播放器开发实例(1)之音乐列表界面_第1张图片

      列表左边是歌曲名,右边是相应的歌曲大小(字节)。   

   

      点击一首歌曲,进入播放页面,就可以播放、暂停和停止音乐。随意调整进度条调整歌曲播放的进度,歌词也对应调整:

      安卓MP3播放器开发实例(1)之音乐列表界面_第2张图片


      首先从本地音乐列表入手来谈,比较简单先看代码:

       

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class LocalMp3Activity  extends ListActivity{
	
	List mp3Infos = null;
	SimpleAdapter simpleAdapter = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.localmp3);
		
	}
	/**
	 * 每次启动本地列表页面重新载入本地MP3
	 */
	@Override
	protected void onResume() {
		FileUtil fileutil = new FileUtil();
		mp3Infos = fileutil.getMp3("mp3/");
		

//		for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {/////////////////
//			MP3Info mp3Info = (MP3Info) iterator.next();
//			Log.d("yinan", "LocalMp3Activity--------"+mp3Info.toString());
//		}
		if(mp3Infos.size() == 0){
			Toast.makeText(this, "没有本地音乐", 0).show();
			simpleAdapter = buildAdapter(mp3Infos);
			setListAdapter(simpleAdapter);
		}else{
			
			
				simpleAdapter = buildAdapter(mp3Infos);
				setListAdapter(simpleAdapter);
			
			
		}
		
		super.onResume();
	}
	
	/**
	 * 封装了ListView的适配器
	 * @param mp3Infos
	 * @return
	 */
	private SimpleAdapter buildAdapter(List mp3Infos){
		
		List> list = new ArrayList>();
		for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
			MP3Info mp3Info = (MP3Info)iterator.next();
			HashMap map = new HashMap();
			map.put("mp3_name", mp3Info.getMp3Name());
			map.put("mp3_size", mp3Info.getMp3Size());
			list.add(map);
		}
		SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.locallist,new String[]{"mp3_name","mp3_size"},new int[]{R.id.mp3_name,R.id.mp3_size});
		return simpleAdapter;
	}
	/**
	 * 实现ListView的列表点击事件
	 */
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		if(mp3Infos != null){
			MP3Info mp3Info = mp3Infos.get(position);
			Intent intent = new Intent();
			intent.putExtra("mp3Info", mp3Info);
	
			intent.setClass(this, PlayActivity.class);
			startActivity(intent);
		}
		
	}
	
	


	
}
   

      看到载入本地MP3这里有一个FileUtil类,是这个程序处理文件的类,看看getMp3方法如何实现:

     

/**获取手机sd卡目录下path目录下的以“MP3”为后缀的文件,返回mp3文件集合
	 * 不仅获得了歌曲文件名,还获得了对应的歌词文件名
	 * @param path
	 * @return
	 */
	public List getMp3(String path){
		List mp3Infos = new ArrayList();
		//
		File f = new File(SDPATH+"/"+path);
		File[] files = f.listFiles();
		
		for (int i = 0; i < files.length; i++) {
			//获取名字包含mp3字样的文件
			if(files[i].getName().indexOf("mp3")>0){
				
				MP3Info mp3Info = new MP3Info();
				mp3Info.setMp3Name(files[i].getName());
				mp3Info.setMp3Size(files[i].length()+"");
				//以.为标志将文件名分开,存入字符串数组
				String s[] = mp3Info.getMp3Name().split("\\.");
				String lrcName = s[0]+".lrc";
		
				mp3Info.setLrcName(lrcName);
	
				mp3Infos.add(mp3Info);
				
			}
				
			
			}
		//}
		return mp3Infos;
	}
}
      其中    String SDPATH  = Environment.getExternalStorageDirectory() + "";

    每次进入本地列表,都会调用Activity的onResume方法,随后加载所有本地MP3歌曲的信息。然后通过一个SimpleAdapter,将MP3的信息显示出来。最后为列表添加了点击事件,该点击事件是点击某歌曲进入播放列表的事件。

     好了,第一部分非常简单,第二部分我们再来看关于音乐播放部分。

你可能感兴趣的:(java,Android进阶)