2013-03-11 123 views
2

所以我有一個班會通過MediaPlayer播放一些歌曲。我有下面的代碼,當選擇一個Radiobutton應播放一首歌曲,但這不起作用,有誰能告訴我爲什麼?如何讓RadioButton播放音樂

我沒有得到任何錯誤,音樂只是不玩。從OnCheckedChange方法

代碼:

 break;   
    case R.id.rFolk1: //setting up sub radiogroup buttons 
     if(fsong1.isPlaying() == false) 
      fsong1.start(); 
     break; 
    case R.id.rFolk2: //setting up sub radiogroup buttons 
     if(fsong2.isPlaying() == false) 
      fsong2.start(); 
     break; 

的歌曲其他代碼:

fsong1 = MediaPlayer.create(this, R.raw.folk1); 
    fsong2 = MediaPlayer.create(this, R.raw.folk2); 

Fullcode:

public class Music extends Activity implements OnCheckedChangeListener, OnClickListener{ 

Button playpause; 
RadioGroup selectionList, Folk, Rock, Pop, NewWave, Pipe;//define the radiogroup 
RadioButton folk1, folk2, rock1, rock2, pop1, pop2, newwave1, newwave2, pipe1, pipe2; //define radiobuttons 
MediaPlayer fsong1, fsong2, rsong1, rsong2, psong1, psong2, nwsong1, nwsong2, pisong1, pisong2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //set fullscreen 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.music); //set layout 

    initialize(); //call this method 
} 

public void initialize(){ 
    // set up the radiogroups 
    selectionList = (RadioGroup) findViewById(R.id.rgMusic); 
    Folk = (RadioGroup) findViewById(R.id.rgFolk); 
    Rock = (RadioGroup) findViewById(R.id.rgRock); 
    Pop = (RadioGroup) findViewById(R.id.rgPop); 
    Pipe = (RadioGroup) findViewById(R.id.rgPipe); 

    folk1 = (RadioButton) findViewById(R.id.rFolk1); 
    folk2 = (RadioButton) findViewById(R.id.rFolk2); 
    rock1 = (RadioButton) findViewById(R.id.rRock1); 
    rock2 = (RadioButton) findViewById(R.id.rRock2); 
    pipe1 = (RadioButton) findViewById(R.id.rPipe1); 
    pipe2 = (RadioButton) findViewById(R.id.rPipe2); 
    pop1 = (RadioButton) findViewById(R.id.rPop1); 
    pop2 = (RadioButton) findViewById(R.id.rPop2); 
    newwave1 = (RadioButton) findViewById(R.id.rNewWave1); 
    newwave2 = (RadioButton) findViewById(R.id.rNewWave2); 

    NewWave = (RadioGroup) findViewById(R.id.rgNewWave); 

    //settting up on check changed 
    selectionList.setOnCheckedChangeListener(this); 

    playpause = (Button) findViewById(R.id.bPlayPause); 
    playpause.setOnClickListener(this); 

    fsong1 = MediaPlayer.create(this, R.raw.folk1); 
    fsong2 = MediaPlayer.create(this, R.raw.folk2); 


} 

@Override 
public void onCheckedChanged(RadioGroup arg0, int arg1) { 
    //case statement for onCheckChange to open a new class/layout 
    // 
    //This also hides radiogroups and shows others 
    switch(arg1){ 
    case R.id.rFolk: 
     Folk.setVisibility(View.VISIBLE); //shows rg for folk 
     //hides all the rest of the radiogroups if visible 
      if(Pipe.getVisibility() == View.VISIBLE){ 
       Pipe.setVisibility(View.GONE); 
       } 
      if(Rock.getVisibility() == View.VISIBLE){ 
      Rock.setVisibility(View.GONE); 
       } 
      if(Pop.getVisibility() == View.VISIBLE){ 
      Pop.setVisibility(View.GONE); 
       } 
      if(NewWave.getVisibility() == View.VISIBLE){ 
      NewWave.setVisibility(View.GONE); 
       } 

     break; 
    case R.id.rPipe: 
     Pipe.setVisibility(View.VISIBLE);//shows rg for pipe 
     //hides all the rest of the radiogroups if visible 
     if(Folk.getVisibility() == View.VISIBLE){ 
      Folk.setVisibility(View.GONE); 
      } 
     if(Rock.getVisibility() == View.VISIBLE){ 
     Rock.setVisibility(View.GONE); 
      } 
     if(Pop.getVisibility() == View.VISIBLE){ 
     Pop.setVisibility(View.GONE); 
      } 
     if(NewWave.getVisibility() == View.VISIBLE){ 
     NewWave.setVisibility(View.GONE); 
      } 

     break; 
    case R.id.rRock: 
     Rock.setVisibility(View.VISIBLE);//shows rg for rock 
     //hides all the rest of the radiogroups if visible 
     if(Folk.getVisibility() == View.VISIBLE){ 
      Folk.setVisibility(View.GONE); 
      } 
     if(Pipe.getVisibility() == View.VISIBLE){ 
     Pipe.setVisibility(View.GONE); 
      } 
     if(Pop.getVisibility() == View.VISIBLE){ 
     Pop.setVisibility(View.GONE); 
      } 
     if(NewWave.getVisibility() == View.VISIBLE){ 
     NewWave.setVisibility(View.GONE); 
      } 

     break; 
    case R.id.rPop: 
     Pop.setVisibility(View.VISIBLE);//shows rg for pop 
     //hides all the rest of the radiogroups if visible 
     if(Folk.getVisibility() == View.VISIBLE){ 
      Folk.setVisibility(View.GONE); 
      } 
     if(Pipe.getVisibility() == View.VISIBLE){ 
     Pipe.setVisibility(View.GONE); 
      } 
     if(Rock.getVisibility() == View.VISIBLE){ 
     Rock.setVisibility(View.GONE); 
      } 
     if(NewWave.getVisibility() == View.VISIBLE){ 
     NewWave.setVisibility(View.GONE); 
      } 

     break; 
    case R.id.rNewWave: 
     NewWave.setVisibility(View.VISIBLE);//shows rg for newwave 
     //hides all the rest of the radiogroups if visible 
     if(Folk.getVisibility() == View.VISIBLE){ 
      Folk.setVisibility(View.GONE); 
      } 
     if(Pipe.getVisibility() == View.VISIBLE){ 
     Pipe.setVisibility(View.GONE); 
      } 
     if(Rock.getVisibility() == View.VISIBLE){ 
     Rock.setVisibility(View.GONE); 
      } 
     if(Pop.getVisibility() == View.VISIBLE){ 
     Pop.setVisibility(View.GONE); 
      } 

     break;   
    case R.id.rFolk1: //setting up sub radiogroup buttons 
     if(fsong1.isPlaying() == false){ 
      fsong1.start(); 
     } 
     break; 
    case R.id.rFolk2: //setting up sub radiogroup buttons 
     if(fsong2.isPlaying() == false){ 
      fsong2.start(); 
     } 
    } 
} 

@Override 
public void onClick(View view) { 
    // setting the onclick listener for the buttons for play/pause stop 

    // check for already playing 
    if(fsong1.isPlaying()){ 

      fsong1.pause(); 
      // Changing button image to play button 
      playpause.setBackgroundResource(R.drawable.play_button); 

    }else{ 
     // Resume song 
      fsong1.start(); 
      // Changing button image to pause button 
      playpause.setBackgroundResource(R.drawable.pause_button); 
    } 

} 

}

+1

該代碼被調用?如果你設置了一個斷點,它會受到影響嗎? – CaseyB 2013-03-11 15:24:56

+0

首先確保OnCheckedChange被觸發或通過將日誌放在RedioButton選擇更改上 – 2013-03-11 15:25:02

+0

@ρяσѕρєяK我在上面顯示的部分中添加了Toast,並且它似乎並未將其添加到代碼的這部分,但它正在運行上面顯示的部分的OnCheckChange。 – Thomas 2013-03-11 15:32:48

回答

0

I'd advise against creating so many MediaPlayers。他們很可能是你的麻煩的原因:當你實例太多時,他們不能很好地工作。

你也應該看看lifecycle of MediaPlayer

其中您可以找到一種方法來移除MediaPlayers的多個實例。你可以,比如改變你玩到:

Boolean fsong1, fsong2, rsong1, rsong2, psong1, psong2, nwsong1, nwsong2, pisong1, pisong2; 
    Boolean isPlaying=false; 

//很多更多的代碼

case R.id.rFolk1: //setting up sub radiogroup buttons 
    if ((isPlaying) && !fsong1){ 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
    if (!fsong1){ 
     //reset all other types of songs! 
     fsong1=true; 
     isPlaying = true;   
     mediaPlayer=MediaPlayer.create(this, R.raw.folk1); 
     mediaPlayer.start(); 
    } 

    break; 

警告:我不會給你你就必須申請全部改變!

+0

我從來沒有使用.prepare,它始終工作,而且我知道我不應該使用那麼多的媒體播放器,但我是一個星期大的android新手,我不知道該怎麼做。 – Thomas 2013-03-11 16:05:32

+0

你對.prepare說得對。在其他情況下需要它,但是當您使用MediaPlayer.create時,您不需要使用它。 – DigCamara 2013-03-11 16:20:44

+0

不客氣。它有助於解決您的問題? – DigCamara 2013-03-11 16:53:38