2013-03-11 94 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