我複製Song.mp3的到我的項目的資產目錄,並寫了這個代碼:錯誤與URI或資產文件中創建的MediaPlayer
private MediaPlayer mp;
Uri uri = Uri.parse("file:///android_asset/song.mp3");
mp=MediaPlayer.create(this, uri);
運行create語句後,變量熔點爲空。哪裏不對?
謝謝。
我複製Song.mp3的到我的項目的資產目錄,並寫了這個代碼:錯誤與URI或資產文件中創建的MediaPlayer
private MediaPlayer mp;
Uri uri = Uri.parse("file:///android_asset/song.mp3");
mp=MediaPlayer.create(this, uri);
運行create語句後,變量熔點爲空。哪裏不對?
謝謝。
試試這個,看看是否有任何異常被捕獲:
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不會拋出。
試試這個:
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) { }
我加了異常處理如你所說和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
我通過修復代碼來訪問資產中的mp3文件來解決這個問題。 mp = new MediaPlayer(); AssetFileDescriptor afd = getAssets()。openFd(「song.mp3」); mp.setDataSource(afd.getFileDescriptor()); 謝謝傑勒! – CalvinS 2010-06-22 16:11:18