2016-11-25 61 views
0

我對Android開發頗爲陌生,目前我正在嘗試製作媒體播放器。我的下一個目標是實現一個播放列表系統,可以添加和刪除項目,並且可以在觸發onCompleteListener()時自動刪除項目。我使用ContentResolver的用於MP3文件的動態播放列表Android

public void getSongList(){ 
     ContentResolver musicResolver=getContentResolver(); 
     Uri musicUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor musicCursor=musicResolver.query(musicUri,null,null,null,null); 

     if(musicCursor!=null && musicCursor.moveToFirst()){ 
      //get columns 
      int titleColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.TITLE); 
      int idColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media._ID); 
      int artistColumn = musicCursor.getColumnIndex 
        (android.provider.MediaStore.Audio.Media.ARTIST); 
      //add songs to list 
      do { 
       long thisId = musicCursor.getLong(idColumn); 
       String thisTitle = musicCursor.getString(titleColumn); 
       String thisArtist = musicCursor.getString(artistColumn); 
       songList.add(new Song(thisId, thisTitle, thisArtist)); 
      } 
      while (musicCursor.moveToNext()); 
     } 
    } 

在這一點上我有它設置這樣我可以在ListView點擊項目,它可以開始通過服務播放的歌曲目前拉動從SD卡中的歌曲。我的問題是存儲歌曲URI和位置數據的最佳方式是什麼。我還希望應用程序能夠在應用程序重新啓動時將播放列表存儲在最後位置,即使在onDestroy()後也是如此。我不確定哪種數據集最適合用來存儲這些數據,以及如何檢索它們。任何幫助將非常感激!

回答

0

您需要將歌曲數據保存到設備

Android框架提供了多種選擇和戰略的持久性:

  • 共享偏好 - 輕鬆保存基本數據作爲一個私人鍵值對堅持字典。
  • 本地文件 - 將任意文件保存到內部或外部設備存儲。
  • SQLite數據庫 - 在特定於應用程序的數據庫中的表中存儲數據。
  • ORM - 使用更高級別的查詢/更新語法描述並保留模型對象。

使用案例

每個存儲選項通常是相關聯的使用情況如下:

  • 共享偏好 - 用於應用程序的喜好,鑰匙,和會話信息。
  • 本地文件 - 通常用於BLOB數據或數據文件緩存(即磁盤鏡像緩存)
  • SQLite數據庫 - 用於複雜的本地數據操作或原始速度
  • ORM - 用於在本地存儲簡單的關係數據以減少SQL樣板文件

瞭解更多:Persisting Data To Device


您可以使用其中的一個選項,但是你的目的,SQLite數據庫ORM是更好的選擇。

您可以訪問SQLite數據庫的Local Databases with SQLiteOpenHelper

對於ORM,您可以嘗試greenDAO

+0

我打算使用SQLite的播放列表,但我想知道格式。我認爲我會指定一個位置編號來跟蹤訂單,但是在完成歌曲後,所有其他條目都必須更新,這將會很笨重。我能想到的另一種方法是讓它們永遠增加,但最終會變得龐大。你會怎麼做? –

+0

爲了解決這個問題,我寧願爲軌道製作一張單獨的桌子。因此,我們創建的表格只包含songId和trackNumber列,而不是用歌曲數據和曲目製作表格。作爲外鍵的SongId列將指向歌曲數據表中的歌曲。 –