歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android音樂播放器:使用Android系統自帶的數據庫

Android音樂播放器:使用Android系統自帶的數據庫

日期:2017/3/1 11:13:08   编辑:Linux編程

這幾天在做一個音樂播放器,需要讀取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. null, null);
  14. musicList = new int[c.getCount()];
  15. int index = 0;
  16. while (c.moveToNext())
  17. {
  18. musicList[index] = c.getInt(0);
  19. index++;
  20. }
  21. startManagingCursor(c);
  22. String[] from =
  23. { MediaStore.Audio.AudioColumns.TITLE,
  24. MediaStore.Audio.AudioColumns.ARTIST,
  25. MediaStore.Audio.AudioColumns.DURATION };
  26. int[] to =
  27. { R.id.tv_musicname, R.id.tv_singer, R.id.tv_musictime };
  28. MusicListAdapter adapter = new MusicListAdapter(this,
  29. R.layout.musiclist_item, c, from, to);
  30. mListView.setAdapter(adapter);
  31. }

順便把直接讀取CD卡上mp3文件的方法寫出來,實現了一個接口:

  1. package com.ll28;
  2. import java.io.File;
  3. import java.io.FilenameFilter;
  4. public class MusicFilter implements FilenameFilter
  5. {
  6. @Override
  7. public boolean accept(File dir, String filename)
  8. {
  9. return filename.endsWith(".mp3");
  10. }
  11. }
Copyright © Linux教程網 All Rights Reserved