2012-03-02 59 views
1

我正在將mediaplayer設置爲單身人士,因此可以通過我的項目中的各種活動來控制它。許多研究讓我看到下面的代碼。將原始數據源設置爲mediaplayer單身人士

if (current_player == null) 
{ 
    try 
    { 
     current_player = MusicPlayer.getInstance(); 
     AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.mytune); 
     current_player.setDataSource(afd.getFileDescriptor()); 
     current_player.prepare(); 
     current_player.setLooping(true); 
     current_player.start(); 
     afd.close(); 
} 
catch (IllegalArgumentException e) { Log.e("IllegalArgumentException", "error: " + e.getMessage(), e); } 
catch (IllegalStateException e) {Log.e("IllegalStateException", "error: " + e.getMessage(), e); } 
catch (IOException e) {Log.e("IOException", "error: " + e.getMessage(), e); } 
catch (Exception e){ Log.e("Main media player", "error: " + e.getMessage(), e); 
     } 

我知道正在創建
1.在MediaPlayer
2. AssetFileDescriptor是正確的文件

的代碼將失敗,並拋出IOException
錯誤.setDataSource行: setDataSourceFD失敗:狀態= 0x80000000

該代碼故意類似於許多聲稱它應該工作的論壇上顯示的許多示例。 要清楚我已經證明

current_player= MediaPlayer.create(this, R.raw.mytune); 

工作正常。

我會非常感謝您的任何建議。

回答

4

將該文件放入目錄資產。 Сorrect線AssetFileDescriptor AFD = ...

AssetFileDescriptor afd = context.getAssets().openFd(fileName); 
current_player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
+0

您解決了這個問題對我來說。該文件可以位於res/raw目錄中。問題是你必須使用.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); – Squiggles 2012-03-02 21:16:39