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


              学习安卓开发有一年了,想想这一年的努力,确实也收获了不少。也找到了比較如意的工作。

    今天准备分享一个以前在初学阶段练习的一个项目。通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正规。这个项目是当时借鉴Mars老师的初学视频做的安州手机的MP3播放器。自己又进行了改进,特别在歌词的优化和加入进度条方面的。因为是8个月前做的,水平非常0基础,bug应该非常多,如今自己又懒得再一次改进,仅仅希望可以给初学的朋友们提供一些帮助。或者起到抛砖引玉的效果。那我就心惬意足了。

            先整体介绍下这个MP3播放器。非常easy,首先是本地列表页面(界面非常low,大家不要笑):

           

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

      

       

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

          


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

           

    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<MP3Info> 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<MP3Info> mp3Infos){
    		
    		List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
    		for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
    			MP3Info mp3Info = (MP3Info)iterator.next();
    			HashMap<String,String> map = new HashMap<String,String>();
    			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<MP3Info> getMp3(String path){
    		List<MP3Info> mp3Infos = new ArrayList<MP3Info>();
    		//
    		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的信息显示出来。最后为列表加入了点击事件。该点击事件是点击某歌曲进入播放列表的事件。

         好了。第一部分很easy,第二部分我们再来看关于音乐播放部分。

  • 相关阅读:
    MVC知识点01
    MVC知识点02
    ADO.NET基础01
    WinForm,MVC知识点
    C#基础01
    28、对多次使用的RDD进行持久化或Checkpoint
    27、优化数据结构
    26、高性能序列化类库
    25、诊断内存的消耗
    24、Checkpoint原理剖析
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5175279.html
Copyright © 2020-2023  润新知