2025-02-10

 

這幾天在做一個音樂播放器,需要讀取SD卡上的所有音樂文件。

我的想法是遍歷所有SD卡上的所有文件目錄,把所有的.mp3 等音樂格式的文件全部讀取出來,在顯示在listview上。

這個做法是最容易想到的,也是可行的。

缺點是顯而易見的,就是效率低,占用瞭大量的資源。

 

後來在飛哥的指導下,才知道android系統中默認有個數據庫,來保存所有的音樂格式的文件。在系統的位置:

 

 

 

 

 

 

 

這個數據庫建的很詳細,基本上想要的信息都能找到。

 

之後直接使用這個數據的數據就行瞭。

例如:

 

/**

     * 顯示音樂列表

     */ 

    private void showListView() 

    { 

        String[] projection = 

        { MediaStore.Audio.AudioColumns._ID, 

                MediaStore.Audio.AudioColumns.ARTIST, 

                MediaStore.Audio.AudioColumns.TITLE, 

                MediaStore.Audio.AudioColumns.DURATION }; 

        Cursor c = getContentResolver().query( 

                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, 

                null, null); 

 

        musicList = new int[c.getCount()]; 

        int index = 0; 

        while (c.moveToNext()) 

        { 

            musicList[index] = c.getInt(0); 

            index++; 

        } 

 

        startManagingCursor(c); 

 

        String[] from = 

        { MediaStore.Audio.AudioColumns.TITLE, 

                MediaStore.Audio.AudioColumns.ARTIST, 

                MediaStore.Audio.AudioColumns.DURATION }; 

        int[] to = 

        { R.id.tv_musicname, R.id.tv_singer, R.id.tv_musictime }; 

        MusicListAdapter adapter = new MusicListAdapter(this, 

                R.layout.musiclist_item, c, from, to); 

        mListView.setAdapter(adapter); 

    } 

 

 

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

 

package com.ll28; 

 

import java.io.File; 

import java.io.FilenameFilter; 

 

public class MusicFilter implements FilenameFilter 

    @Override 

    public boolean accept(File dir, String filename) 

    { 

        return filename.endsWith(".mp3"); 

    } 

 

}   

摘自:The way to All Blue!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *