2013-08-28 517 views
0

我正在製作一個帶有三個相當大的音頻文件的應用程序,我想以正確的方式播放它們。據我瞭解,最好的方法是以某種方式讓他們在SD卡上播放它們,但是如何做到這一點的唯一例子是已經在設備上的歌曲,例如音樂庫。從SD卡播放音頻Android Mediaplayer

這段代碼的工作原理是res/raw(raw是我創建的一個文件夾,根據基本的Android指令),但這隻適用於使用兩個小樣本音頻文件,而不是我想要使用的三個更大的音頻文件導致「內存不足」警告(在模擬器上至少)

MediaPlayer mp; 

    @JavascriptInterface 
    public void playSong() { 
     // Play song 
     if(mp == null) { 
      mp = MediaPlayer.create(mContext,R.raw.rz); 
     } 
     mp.start(); 
    } 

我試圖設置數據源到我命名爲SD卡的文件夾,但沒有奏效。

建議,示例代碼,想法?

回答

1

在應用程序中擁有媒體文件的最佳方式是在項目的/ assets文件夾中。

但是,你也有一些文件大小的限制,這取決於Android的實施,但應該在1MB左右,至少對我來說這工作。

所以我的建議是將媒體文件分成幾塊,每塊大小爲1MB,並將它們放在assets文件夾中。

然後,當您啓動應用程序時,檢查媒體文件是否在SD卡上,可以在應用程序的外部數據目錄中,如果沒有,則複製它們,然後從塊文件重新創建原始媒體文件。

而這應該可以解決你的問題。

編輯:

我進入這個更詳細,並發現了1MB的限制(以資產或RES/RAW)僅適用於Android的打包需要壓縮文件。如果Android打包程序發現文件已經被壓縮,如mp3或png,它將不會壓縮,並且沒有限制。

但也要注意,由於許多設備的容量有限,擁有較大的apk文件也會限制可以安裝它的設備。

對於大文件,如果可能的話,最好是在第一次運行時從Web服務器獲取它們。

+0

佩德羅感謝您的意見!沒有一首歌曲小於5MB,所以沒有辦法以本地音頻文件的正確方式,除非沒有針對音樂文件的單個本地實施,並且它們都針對音效。 –

+0

更新了我的答案。 –

+0

謝謝佩德羅! –