2017-02-16 2 views
0

"재생/중지"단추를 만들고 싶습니다. "재생"버튼을 클릭하면 노래를 재생하고 텍스트를 "정지"로 변환해야하며 "중지"를 클릭하면 버튼 텍스트를 다시 "재생"으로 변경해야하며 노래가 다시 재생되어야합니다 처음.미디어 플레이어 단추가 다시 시작되지 않음

import android.media.MediaPlayer; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import java.io.IOException; 

public class MainActivity extends AppCompatActivity { 
    private Button btn_playStop; 
    private MediaPlayer mediaPlayer; 
    private boolean flag = false; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setTitle("Play Music"); 

     mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.zara_sa); 
     btn_playStop = (Button)findViewById(R.id.btn_play_stop); 


     btn_playStop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mediaPlayer.isPlaying() && flag==true){ 
        stopSong(); 
       } 
       else if (flag == false){ 
        playSong(); 
       } 
      } 
     }); 
    } 

    public void playSong(){ 
     mediaPlayer.start(); 
     btn_playStop.setText("Stop"); 
     flag = true; 
    } 
    public void stopSong() { 
     mediaPlayer.stop(); 
     btn_playStop.setText("Play"); 
     flag = false; 
    } 
} 
+0

이전 mediaPlayer.prepare();를 호출해야 mediaPlayer.prepare();를 호출해야? 내 눈이 아파. – shtolik

+0

@shtolik 좋아요 완료 –

답변

0

당신이 mediaPlayer.stop();라고하면 당신은 너무 처음에 그냥 mediaPlayer.start();를 호출 할 수 있지만 다음 번에 당신이없는 모든 문자를 대문자로 수 mediaPlayer.start();

public void playSong(){ 
    try { 
     mediaPlayer.prepare(); 
    } catch (IOException e) { 
    } 
    mediaPlayer.start(); 
    btn_playStop.setText("Stop"); 
    flag = true; 
} 
+0

android.media.MediaPlayer.prepare (네이티브 메소드)에서 java.lang.IllegalStateException을 던지고 있습니다 –

+0

제가 실수를했습니다. 제 대답을 편집했습니다. 처음에는 mediaPlayer가 이미 준비되었으므로 prepare()를 호출하지 않았습니다. stop을 호출 한 후에 만 ​​prepare를 호출해야합니다. –

+0

이 코드를 추가 한 경우 public void stopSong() { mediaPlayer.stop(); btn_playStop.setText ("Play"); flag = false; 시도 { mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } 이 노래를 재생 한 후에도 계속 재생됩니다. 그리고 mediaPlayer.start()를 제거한 경우; 이 방법에서 실제로 노래를 다시 시작합니다. 나는 노래를 "멈추고"처음부터 시작해야한다. –