MediaStore里有个file表,里面有个列提供文件所在目录的索引号(见官网http://developer.android.com/reference/android/provider/MediaStore.Files.FileColumns.html#PARENT ),

虽然不知道这个索引号是来干什么的,但它却是目录的唯一标示,可以用它来统计信息。

以检索音频为例,使用这条select语句即可满足要求: select _data,count(parent) as num_of_songs from file_table where ( media_type = 2) group by (parent); 换成变量名就是: select FileColumns.DATA,count(FileColumns.PARENT) as num_of_songs where (FileColumns.MEDIA_TYPE = FileColumns.MEDIA_TYPE_AUDIO) group by (FileColumns.PARENT);

然后用ContentResolver来query一下,获得cursor,用cursor获取到_data和num_of_songs列 _data就是文件的路径,截取一下就获得到了所在文件夹的路径及其名称,num_of_songs 就是文件夹里包含的歌曲数目

 1  private String num_of_songs = "num_of_songs"; 2  3  /** 要从MediaStore检索的列 */ 4  private final String[] mProjection = new String[] { 5        MediaStore.Files.FileColumns.DATA, 6        "count(" + MediaStore.Files.FileColumns.PARENT + ") as " 7              + num_of_songs }; 8  /** where子句 */ 9  private String mSelection = MediaStore.Files.FileColumns.MEDIA_TYPE + " = "10        + MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO + " ) "11        + " group by ( " + MediaStore.Files.FileColumns.PARENT;12  @Override13  public List<FolderInfo> loadInBackground() {14      Log.i(TAG, "loadInBackground");15      String filepath, folderpath, foldername;16      int song_num = 0;17 18      Cursor cursor = mContentResolver.query(19          MediaStore.Files.getContentUri("external"), mProjection,20          mSelection, null, null);21      int index_data = cursor22          .getColumnIndex(MediaStore.Files.FileColumns.DATA);23      int index_num_of_songs = cursor.getColumnIndex(num_of_songs);24 25      List<FolderInfo> itemsList = new ArrayList<FolderInfo>();26 27      // 将数据库查询结果保存到一个List集合中(存放在RAM)28      if (cursor != null) {29        while (cursor.moveToNext()) {30          FolderInfo item = new FolderInfo();31 32          // 获取每个目录下的歌曲数量33          song_num = cursor.getInt(index_num_of_songs);34          item.setNumOfTracks(song_num);35 36          // 获取文件的路径,如/storage/sdcard0/MIUI/music/Baby.mp337          filepath = cursor.getString(index_data);38 39          // 获取文件所属文件夹的路径,如/storage/sdcard0/MIUI/music40          folderpath = filepath.substring(0,41                filepath.lastIndexOf(File.separator));42 43          // 获取文件所属文件夹的名称,如music44          foldername = folderpath.substring(folderpath45                .lastIndexOf(File.separator) + 1);46          item.setFolderName(foldername);47          item.setFolderPath(folderpath);48 49          itemsList.add(item);50        }51      }52      // 如果没有扫描到媒体文件,itemsList的size为0,因为上面new过了53      return itemsList;54  }

更多相关文章

  1. ionic3文件目录介绍
  2. android从未安装的apk文件里获取信息(包信息,资源信息)
  3. 提高开发效率-使用Android Studio Template快速生成模板文件
  4. Android API开发之OpenGL开发之Android OpenGL显示STL模型文件
  5. android studio R文件找不到
  6. 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决
  7. android 源码下java文件的路径

随机推荐

  1. Android配置----DDMS 连接真机(己ROOT),用f
  2. Android之TextView的样式类Span的使用具
  3. 谷歌正式推出官方“Android界面设计”网
  4. Android UI用户界面开发辅助工具(值得一试
  5. 国内最全的android软件商店 应用市场 汇
  6. Android输入系统之InputChannel(下)
  7. Android Studio 100 tips and tricks
  8. Android中如何解析JSON数据
  9. [置顶] wzplayer player (android,windows
  10. Android(安卓)layout_weight用法图解