需求1:将内存卡中的MP3音乐读取出来并显示到列表当中
1. 从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象
2. 迭代List集合,把每一个Mp3Info对象的所有属性,保存到Map对象当中
3. 定义一个List集合,把Map对象添加到List集合当中
4. 通过定义一个SimpleAdpter,调用setAdpter方法,将数据显示到列表当中
- public List<Mp3Info> getMp3Infos() {
- Cursor cursor = getContentResolver().query(
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
- MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
- List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
- for (int i = 0; i < cursor.getCount(); i++) {
- Mp3Info mp3Info = new Mp3Info();
- cursor.moveToNext();
- long id = cursor.getLong(cursor
- .getColumnIndex(MediaStore.Audio.Media._ID));
- String title = cursor.getString((cursor
- .getColumnIndex(MediaStore.Audio.Media.TITLE)));
- String artist = cursor.getString(cursor
- .getColumnIndex(MediaStore.Audio.Media.ARTIST));
- long duration = cursor.getLong(cursor
- .getColumnIndex(MediaStore.Audio.Media.DURATION));
- long size = cursor.getLong(cursor
- .getColumnIndex(MediaStore.Audio.Media.SIZE));
- String url = cursor.getString(cursor
- .getColumnIndex(MediaStore.Audio.Media.DATA));
- int isMusic = cursor.getInt(cursor
- .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
- if (isMusic != 0) {
- mp3Info.setId(id);
- mp3Info.setTitle(title);
- mp3Info.setArtist(artist);
- mp3Info.setDuration(duration);
- mp3Info.setSize(size);
- mp3Info.setUrl(url);
- mp3Infos.add(mp3Info);
- }
- }
- return mp3Infos;
- }
- public void setListAdpter(List<Mp3Info> mp3Infos) {
- List<HashMap<String, String>> mp3list = 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("title", mp3Info.getTitle());
- map.put("Artist", mp3Info.getArtist());
- map.put("duration", String.valueOf(mp3Info.getDuration()));
- map.put("size", String.valueOf(mp3Info.getSize()));
- map.put("url", mp3Info.getUrl());
- mp3list.add(map);
- }
- mAdapter = new SimpleAdapter(this, mp3list,
- R.layout.music_list_item_layout, new String[] { "title", "Artist", "duration" },
- new int[] { R.id.music_title, R.id.music_Artist, R.id.music_duration });
- mMusiclist.setAdapter(mAdapter);
- }
实现效果如图:

需求2:点击列表的每一项,启动一个服务来播放音乐
1. 注册条目点击监听器OnItemClickListener
2. 定义一个实现OnItemClickListener接口的内部类
3. 定义一个继承Service的服务类PlayerServie
1. 注册条目点击监听器OnItemClickListener
- mMusiclist = (ListView) findViewById(R.id.music_list);
- mMusiclist.setOnItemClickListener(new MusicListItemClickListener());
- mp3Infos = getMp3Infos();
- setListAdpter(getMp3Infos());
2. 定义一个实现OnItemClickListener接口的内部类
- private class MusicListItemClickListener implements OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- if(mp3Infos != null) {
- Mp3Info mp3Info = mp3Infos.get(position);
- Log.d("mp3Info-->", mp3Info.toString());
- Intent intent = new Intent();
- intent.putExtra("url", mp3Info.getUrl());
- intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
- intent.setClass(MainActivity.this, PlayerService.class);
- startService(intent);
- }
- }
- }
3. 定义一个继承Service的服务类PlayerServie(未完善的Service类)
以上代码实现了两个需求,显示音乐列表和实现列表点击事件启动Servic。下次会实现控制音乐播放的需求。
Android应用开发--MP3音乐播放器代码实现(一)
原文:http://www.cnblogs.com/wangfeng520/p/5089609.html