Android音乐播放器:使用Android系统自带的数据库


这几天在做一个音乐播放器,需要读取SD卡上的所有音乐文件。

我的想法是遍历所有SD卡上的所有文件目录,把所有的.mp3 等音乐格式的文件全部读取出来,在显示在listview上。

这个做法是最容易想到的,也是可行的。

缺点是显而易见的,就是效率低,占用了大量的资源。


后来在飞哥的指导下,才知道Android系统中默认有个数据库,来保存所有的音乐格式的文件。在系统的位置:





这个数据库建的很详细,基本上想要的信息都能找到。


之后直接使用这个数据的数据就行了。

例如:

  1. /** 
  2.      * 显示音乐列表 
  3.      */  
  4.     private void showListView()  
  5.     {  
  6.         String[] projection =  
  7.         { MediaStore.Audio.AudioColumns._ID,  
  8.                 MediaStore.Audio.AudioColumns.ARTIST,  
  9.                 MediaStore.Audio.AudioColumns.TITLE,  
  10.                 MediaStore.Audio.AudioColumns.DURATION };  
  11.         Cursor c = getContentResolver().query(  
  12.                 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null,  
  13.                 nullnull);  
  14.   
  15.         musicList = new int[c.getCount()];  
  16.         int index = 0;  
  17.         while (c.moveToNext())  
  18.         {  
  19.             musicList[index] = c.getInt(0);  
  20.             index++;  
  21.         }  
  22.   
  23.         startManagingCursor(c);  
  24.   
  25.         String[] from =  
  26.         { MediaStore.Audio.AudioColumns.TITLE,  
  27.                 MediaStore.Audio.AudioColumns.ARTIST,  
  28.                 MediaStore.Audio.AudioColumns.DURATION };  
  29.         int[] to =  
  30.         { R.id.tv_musicname, R.id.tv_singer, R.id.tv_musictime };  
  31.         MusicListAdapter adapter = new MusicListAdapter(this,  
  32.                 R.layout.musiclist_item, c, from, to);  
  33.         mListView.setAdapter(adapter);  
  34.     }  

顺便把直接读取CD卡上mp3文件的方法写出来,实现了一个接口:

  1. package com.ll28;  
  2.   
  3. import java.io.File;  
  4. import java.io.FilenameFilter;  
  5.   
  6. public class MusicFilter implements FilenameFilter  
  7. {  
  8.     @Override  
  9.     public boolean accept(File dir, String filename)  
  10.     {  
  11.         return filename.endsWith(".mp3");  
  12.     }  
  13.   
  14. }  

相关内容