2

我有一系列聲音文件的擴展文件。較長的是.mp3文件,而較短的聲音效果是.wav文件。我將它們打包在一個沒有壓縮的.zip文件中。我使用Google提供的Zip文件閱讀器和下載器庫。從擴展文件播放聲音文件

我打開聲音文件,如下所示:

MediaPlayer mPlayer; 

... 
AssetFileDescript asd = expansionFile.getAssFileDescriptor(fileName); 
FileDescriptor soundFile = asd.getFileDescriptor(); 
mPlayer = new MediaPlayer(); 
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mPlayer.setDataSource(soundFile); 
mPlayer.prepare(); 
mPlayer.start(); 

奇怪的是,它起着每一次相同的聲音文件。它似乎是無論什麼先找到。 asd.getDeclaredLength()asd.getLength()的字節大小正是它應該是的。這意味着文件描述符至少可以找到文件,但由於某種原因,MediaPlayer播放它決定的任何隨機文件。

我在這裏錯過了什麼?任何幫助將不勝感激。

謝謝。

+0

你能告訴我創建擴展文件的方法,我還需要上傳mp3文件作爲擴展並從中讀取 –

+0

我假設你已經閱讀了這些指導原則。 http://developer.android.com/guide/google/play/expansion-files.html – DeeV

+3

除此之外,你這樣做的方式是使用像WinRar或WinZip這樣的程序。歸檔您需要的文件並適當地命名它們。 **請勿使用壓縮​​*。在WinRar的情況下,你會說「歸檔存儲」,這將做0%的壓縮。這對聲音文件來說很重要,因爲它與數據一起使用。歸檔完成後,只需將文件擴展名「.zip」重命名爲「.obb」即可。 – DeeV

回答

4

第一個近似是正確的,除了當壓縮文件包含多個文件,那麼你應該使用: Play audio file from the assets directory

mPlayer.setDataSource(asd.getFileDescriptor(), asd.getStartOffset(), asd.getLength()); 

你可以從這個其他的問題得到更多的信息請記住在setDataSource之後關閉AssetFileDescriptor到媒體播放器:

asd.close(); 

http://developer.android.com/reference/android/media/MediaPlayer.html#setDataSource%28java.io.FileDescriptor,%20long,%20long%29

+0

謝謝!我一直在想這個錯誤是在擴展文件庫中,並引起了很多挫折。 – DeeV