2012-04-26 125 views
1

我有一個活動,有一系列的按鈕,當按下時應播放音頻文件。我一直在嘗試使用MediaPlayer實現這一點,但我無法讓它工作。 這裏是代碼我一直在努力:MediaPlayer錯誤android

 final MediaPlayer mp = new MediaPlayer(); 
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mp.setDataSource(this, R.raw.greet_1); 
      mp.prepare(); 
      mp.start(); 

     } 
    }); 

的setDateSource方法似乎沒有工作,誰能告訴我在哪裏,我錯了? 我想然後根據按下哪個按鈕將mediaPlayer設置爲相關的音頻文件,這可能嗎?

更新

 final MediaPlayer mp = new MediaPlayer(); 
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    try { 
         Uri myUri = Uri.parse(R.raw.greet_1); 

         mp.setDataSource(GreetingsLesson.this, R.raw.greet_1); 

         mp.prepare(); 

         mp.start(); 

        } catch (IllegalArgumentException e) { 

         e.printStackTrace(); 

        } catch (IllegalStateException e) { 

         e.printStackTrace(); 

        } catch (IOException e) { 

         e.printStackTrace(); 

        } 
     } 
    }); 

回答

1

試試這個:

 final MediaPlayer mp = new MediaPlayer(); 
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    try { 

        mp.setDataSource(CurrentActivity.this, R.raw.greet_1); 

        mp.prepare(); 

        mp.start(); 

        } catch (IllegalArgumentException e) { 

        e.printStackTrace(); 

        } catch (IllegalStateException e) { 

        e.printStackTrace(); 

        } catch (IOException e) { 

        e.printStackTrace(); 

        } 
    } 
    }); 
+0

當我嘗試這個Eclipse仍然給我一個錯誤,它建議更改greet_1到Uri的類型? – user1356791 2012-04-26 13:21:27

+0

請確保raw的位置是'res/raw /',並且您正在使用'mp.setDataSource(CurrentActivity.this,R.raw.greet_1);' – 2012-04-26 13:26:28

+0

它是res/raw。我不明白爲什麼它不工作? – user1356791 2012-04-26 13:27:50

0

Ifyou想與其中一個文件發送的媒體播放器對象fromapplication原料資源或應用程序資產文件,您可以找時間做如下:

try { 
AssetFileDescriptor fd = getResources().openRawResouceFd(R.raw.greet_1); 
mp.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength()); 
mp.start(); 
fd.close(); 
} catch (IllegalArgumentException e) { 
// handle exception 
} catch (IllegalStateException e) { 
// handle exception 
} catch (IOException e) { 
// handle exception 
} 
+0

04-26 15:08:26.326:E/MediaPlayer(528):attachNewPlayer在狀態8中調用 04-26 15:08:26.326:W/System.err(528):java.lang.IllegalStateException 04-26 15:08:26.326:W/System.err(528):\t at android.media.MediaPlayer.setDataSource(Native Method) 這是在添加代碼後單擊按鈕時發生的情況 – user1356791 2012-04-26 14:09:48

0

Wh y不只是使用

mp = MediaPlayer.create(this, R.raw.greet_1); 

然後你不需要準備或開始。

+0

這不起作用說:「最後的局部變量mp不能被分配,因爲它是在一個封閉類型中定義的」 仍然在努力獲得這個工作 – user1356791 2012-04-26 15:01:17

0

你在模擬器中運行這個嗎?如果是這樣檢查你的AVD管理器已經在硬件下,添加屬性「音頻播放支持|是」