2012-04-29 71 views
0

我一直在開發我自己的android音樂播放器(學習在android中編程)。需要我的音樂播放器的想法

我的問題是當應用程序第一次啓動時,它要求用戶選擇一個媒體文件夾來掃描文件。一切都很好,但我在文件夾中有大約1200首歌曲,掃描需要大約三分鐘才能完成。掃描涉及的步驟是從文件夾遞歸獲取文件,並將每首歌曲的完整路徑添加到數組列表中。然後將每個項目從數組列表中添加到數據庫。我添加到數據庫的字段是路徑,歌曲的標題(我使用MediaMetadataReader檢索這個),藝術家,專輯和唯一的ID。

有沒有更好的方法來做到這一點?任何方式來優化這個?提前致謝。

編輯:

當我運行首次任何其他音樂播放器,其庫中包含的所有歌曲我與元數據有。他們的掃描只需要幾秒鐘的時間。他們如何做到這一點?我究竟做錯了什麼?

+1

你可以使用Android的MediaProvider,它應該爲你提供所有這些信息(如果音樂在掃描的地方 - 可能不是輔助sd卡)http://developer.android.com/reference/android/provider/ MediaStore.Audio.Media.html多數民衆贊成在其他人如何做btw :) – zapl 2012-04-29 02:50:04

+0

我很愚蠢。我應該先檢查api。非常感謝.. – Dipesh 2012-04-29 02:55:31

+0

我不知道如何使用它,但[MusicUtils.java](https:// github。com/android/platform_packages_apps_music/blob/master/src/com/android/music/MusicUtils.java)可能有所幫助 – zapl 2012-04-29 03:06:32

回答

3

你怎麼樣,當你的應用程序被分配一個媒體文件時,您遍歷所有的文件你正在做的方式,只獲得路徑,

File dir = new File(dirPath); 
File[] filelist = dir.listFiles(); 

然後創建在同一文件夾中的XML文件的一些獨特名稱或編號與您的應用程序相關聯。

<Songs> 
    <song> 
    <name></name> 
    <thumbnailpath></thumbnailpath> 
    <filepath></filepth> 
    </song> 
</Songs> 

下一次用戶選擇任何文件夾,你檢查你是否創建了列出的XML文件?如果沒有,那麼創建和將來只是使用這個XML文件作爲你的表的來源。

然而,技巧部分是當用戶更改媒體可以說他們增加了新的,然後你必須編寫一個邏輯來處理。

後OP的評論

好吧,我沒有任何,但谷歌總是在那裏大聲笑。但我記得告訴你的另一件事是。讓用戶創建播放列表會更聰明,沒有人喜歡一起瀏覽1200首歌曲,但是將列表切分成幾個不同的播放列表,這使得您的算法可以更快地遍歷少數文件:)

+0

我使用文件夾監視器來監視媒體文件夾,但只有當我的應用程序正在運行時才起作用。 無論如何,dir.listFiles()是我用來添加數組列表的路徑。 你能給我一個簡單的例子來製作一個XML文件作爲表的來源嗎? – Dipesh 2012-04-29 02:44:28

+0

@Dipesh,檢查更新的答案 – doNotCheckMyBlog 2012-04-29 02:48:44

+0

我已經實現了一種讓用戶創建自己的播放列表的方法。我只想像所有其他音樂播放器一樣快速掃描所有歌曲。 – Dipesh 2012-04-29 02:52:44

1

雖然Craftero的答案是正確的,我建議不要使用XML文件來序列化文件系統的內容,而是使用SQLite數據庫來緩存目錄的內容。這將是一個足夠靈活的解決方案,您可以安排後臺服務來偶爾更新數據庫以查找新歌曲(或者在應用程序打開時手動啓動新的掃描)。這可以讓你擁有兩全其美的世界,你可以最初快速地顯示目前爲止發現的所有內容(除了第一次運行應用程序),然後用新的方式更新數據庫(以及相應的視圖)你找到的文件。請注意,根據用於表示歌曲的數據結構,您可能不希望在Android陣列中保留1200首歌曲,這對於應用程序而言似乎有相當多的內存空間。

+0

我沒有攻讀博士學位。我從來沒有提到我在我的個人資料中做什麼。它在哪裏說我在做博士? – Dipesh 2012-04-29 03:08:09