2013-04-05 60 views
0

我的/ res/raw目錄中有一個名爲keyclick.wav(/res/raw/keyclick.wav)的小型解壓縮.wav文件。從/ res/raw中讀取MediaPlayer.create()的FileNotFoundException

然而,我偶爾看到拋出的異常導致的活性崩潰:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed at ... 
android.content.res.AssetManager.openNonAssetFdNative(Native Method) 
android.content.res.AssetManager.openNonAssetFd(AssetManager.java:427) 
android.content.res.Resources.openRawResourceFd(Resources.java:857) 
android.media.MediaPlayer.create(MediaPlayer.java:662) 

它說:「它可能是壓縮」,但我仔細檢查過,也沒有被壓縮。

我這是怎麼實例化的MediaPlayer:

this.clickPlayer = MediaPlayer.create(this.getActivity(), R.raw.keyclick); 

我上傳的文件,這樣就可以直接看到它:

http://inadaydevelopment.com/stackoverflow/keyclick.wav

的文件只有664個字節,它不是壓縮。爲什麼系統無法獲取文件描述符?

+0

你能顯示代碼呢? – DigCamara 2013-04-05 22:41:23

+0

@Kenny Wyland ..從錯誤日誌中,我猜'AssetManager'無法在它的'AssetPaths'中找到文件,即預先知道的路徑列表。如果'/ res/raw'路徑不是一個硬性約束,你可以檢查你是否仍然面臨與'/ mnt/sdcard0'一樣的目錄問題? – Ganesh 2013-04-05 22:49:12

+0

@DigCamara我添加了用於創建MediaPlayer的代碼。 – 2013-04-05 23:06:30

回答

1

肯尼,你有沒有嘗試過使用這種方式播放文件:

MediaPlayer mp = new MediaPlayer(); 
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.keyclick); 
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
mp.prepare(); 
mp.start();