首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 音樂播放器開發:歌曲資源放置與打包策略 (raw/assets vs 外部存儲)

     編輯:程式設計綜合問答

問題:開發音樂播放器,如何將歌曲放入項目並打包進 APK?

方案一:放入 res/raw/ (適合少量、固定、無需掃描的音效/背景音樂)

  • 文件名**只能小寫字母、數字、下劃線** (如 song_01.mp3)。
  • 通過 R.raw.song_01 獲取資源 ID,MediaPlayer.create(context, R.raw.song_01) 播放。
  • **缺點**:APK 體積膨脹、無法動態增刪、不出現在系統媒體庫、無法被其他播放器掃描到。

方案二:放入 assets/ (適合只讀、需文件名保持原樣的資源)

  • 保留原始文件名/目錄結構,通過 AssetManager.open("music/song.mp3") 獲取輸入流。
  • 需複製到內部存儲 (getFilesDir()) 供 MediaPlayer 使用 (setDataSource 需文件描述符或路徑)。
  • 同樣不出現在媒體庫。

方案三:外部存儲 (SD卡/內部共享存儲) — **音樂播放器標準做法**

  1. 掃描媒體庫:
    ContentResolver resolver = getContentResolver();
    Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
    遍歷 cursor 獲取標題、藝術家、專輯、路徑、時長等元數據。
  2. 權限:
    Android 10+ (API 29) 無需存儲權限即可訪問 MediaStore。
    Android 9- 需 READ_EXTERNAL_STORAGE (運行時申請)。
  3. 播放:
    mediaPlayer.setDataSource(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
    或用 MediaMetadataRetriever 提取封面圖。
  4. 實時更新:
    註冊 ContentObserver 監聽 MediaStore 變化,自動刷新列表。

總結建議

**不要將歌曲打包進 APK。** 正規音樂播放器應掃描 MediaStore 讀取用戶設備上的音樂文件,支持本地導入、在線下載、歌單管理等功能。raw/assets 僅適合應用自帶的少量音效/提示音。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved