2010-06-22 48 views
10

我複製Song.mp3的到我的項目的資產目錄,並寫了這個代碼:錯誤與URI或資產文件中創建的MediaPlayer

private MediaPlayer mp; 

Uri uri = Uri.parse("file:///android_asset/song.mp3"); 

mp=MediaPlayer.create(this, uri); 

運行create語句後,變量熔點爲空。哪裏不對?

謝謝。

回答

6

試試這個,看看是否有任何異常被捕獲:

try { 
    MediaPlayer mp = new MediaPlayer(); 
    mp.setDataSource(this, uri); 
} 
catch (NullReferenceArgument e) { 
    Log.d(TAG, "NullReferenceException: " + e.getMessage()); 
} 
catch (IllegalStateException e) { 
    Log.d(TAG, "IllegalStateException: " + e.getMessage()); 
} 
catch (IOException e) { 
    Log.d(TAG, "IOException: " + e.getMessage()); 
} 
catch (IllegalArgumentException e) { 
    Log.d(TAG, "IllegalArgumentException: " + e.getMessage()); 
} 
catch (SecurityException e) { 
    Log.d(TAG, "SecurityException: " + e.getMessage()); 
} 

者將解釋什麼是你創造出錯的例外。根據文檔,靜態創建方法只是上面的try塊中的簡寫。我可以看到的主要區別在於setDataSource所做的靜態方法create不會拋出。

+0

我加了異常處理如你所說和mp.prepare()語句,我就準備() 06-22 14收到此錯誤:45:20.806:ERROR/PlayerDriver(554):命令PLAYER_SET_DATA_SOURCE完成一個錯誤或信息PVMFErrNotSupported 06-22 14:45:20.806:錯誤/ MediaPlayer(857):錯誤(1,-4) 06-22 14:45:20.987 :DEBUG/dalvikvm(857):使用exceptObj返回的JDWP調用= 0x43744d68 06-22 14:45:33.056:DEBUG/ASSETTEST(857):IOException:準備e失敗:status = 0x1 6-22 14:45:43.068:WARN/System.err(857):java.io.IOException:Prepare failed .: status = 0x1 Next? – CalvinS 2010-06-22 14:52:24

+7

我通過修復代碼來訪問資產中的mp3文件來解決這個問題。 mp = new MediaPlayer(); AssetFileDescriptor afd = getAssets()。openFd(「song.mp3」); mp.setDataSource(afd.getFileDescriptor()); 謝謝傑勒! – CalvinS 2010-06-22 16:11:18

21

試試這個:

try { 
    AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3"); 
    player = new MediaPlayer(); 
    player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
    player.prepare(); 
    player.start(); 
    } 
catch (IllegalArgumentException e) { } 
catch (IllegalStateException e) { } 
catch (IOException e) { } 
+1

這是爲我做的。顯式添加偏移量和長度。奇怪的是,只是給fd沒有用。 – grebulon 2014-02-26 08:56:27

+0

這應該是被接受的答案。 – BoD 2015-01-05 13:03:15

相關問題