마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

한 개의 버튼으로 두 가지 기능 (재생/ 정지 다시 재생)

0 추천
package com.example.music;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.media.MediaPlayer;

public class MainActivity extends Activity {
 private MediaPlayer MP;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  MP=MediaPlayer.create(this, R.raw.music);
  
  final Button btn1=(Button)findViewById(R.id.btn1);
  btn1.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v)
   {
    if(MP.isPlaying()){
    btn1.setText("STOP");
             MP.stop();
             }
   }
  });  

  btn1.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v)
   {
    if(MP.isStopped()){
    btn1.setText("PLAY");
             MP.start();
             }
   }
  });
 }
 

 protected void onStop() {
  MP.stop();
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}

 

위 코드처럼 작성했는데요.... 이 이상 어떻게 코드를 짜야할지 모르겠네요 ㅠ

한개의 버튼에 두가지 기능(재생/정지, 정지 후 다시 재생)

처음엔 PLAY라는 버튼을 뜨고 그 버튼을 누르면 음악 재생되면서 버튼의 이름이 STOP이라고 바꿔서 그 버튼을 누르면 버튼 이름이 PLAY로 바꿔면서 정지 되는건데요....

음악이 재생 되다가 정지로 오면 정지가 되지만은... 다시 버튼 이름이 PLAY로 안바뀌고 다시 재생도 안됩니다 ㅠㅠ

어떻게 해야 될지....막막하네요 ㅠㅠㅠㅠ 좀 도와주시면 감사하겠습니다^^
익명사용자 님이 2013년 5월 1일 질문
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        MP=MediaPlayer.create(this, R.raw.music);
       
        final Button btn1=(Button)findViewById(R.id.btn1);   
        btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {
                if(MP.isPlaying()){
                btn1.setText("STOP");
                MP.pause();
                }
            }
        });       

        btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {
                if(MP.isStopped()){ -  이 부분이 오류뜨네요...ㅠㅠㅠ
                btn1.setText("PLAY");
                MP.start();
                }
            }
        });   
    }

2개의 답변

0 추천

stop 대신 pause를 호출 하세요

자세한 동작 플로우는 아래 다이아그램을 확인 하세요

http://developer.android.com/reference/android/media/MediaPlayer.html#State Diagram

익명사용자 님이 2013년 5월 1일 답변
if(MP.isStopped()){ - 이 부분이 에러가 나는데요...
    btn1.setText("PLAY");
             MP.start();
             }

그리고

   if(MP.isPlaying()){
    btn1.setText("STOP");
             MP.stop(); - 이부분에 pause로만 바꾸면 되는건가요?
             }
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        MP=MediaPlayer.create(this, R.raw.music);
        
        final Button btn1=(Button)findViewById(R.id.btn1);    
        btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {
                if(MP.isPlaying()){
                btn1.setText("STOP");
                MP.pause();
                }
            }
        });        

        btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {
                if(MP.isStopped()){ -  이 부분이 오류뜨네요...ㅠㅠㅠ
                btn1.setText("PLAY");
                MP.start();
                }
            }
        });    
    }
0 추천

리스너를 두번 설정해주고있네요; 하나로 합치세요.

 

btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) 
            {


                if(MP.isPlaying()){
                btn1.setText("STOP");
                MP.pause(); 
                }

               if(MP.isStopped()){

                btn1.setText("PLAY");
                MP.start(); 
                }

            }
        });       

얼룩돼지 (15,720 포인트) 님이 2013년 5월 1일 답변
하나로 합쳐도... if(MP.isStopped()){ 이 부분이 빨간선으로 오류가 뜨네요....ㅠㅠㅠㅠ 정확히 말씀드리면 isStopped 이부분이 빨간선으로 오류가 떠요 ㅠㅠㅠㅠㅠ
isStopped라는 API가 없어서 그렇습니다.
그냥 else로 처리 하셔도 됩니다. 의도하신 바는 플레이가 되지 않을 경운 start 시키는 것이니요
btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {


                if(MP.isPlaying()){
                btn1.setText("STOP");
                MP.pause();
                }
                else
        {

                btn1.setText("PLAY");
                MP.start();
                }

            }
        });       

이렇게 수정하시면 될 겁니다.
아 감사합니다!^^
근데 하나더 문의 드릴게 있는데.. pause 대신 stop로 하게되면 왜 안되는건가요? 전 일시정지가 아니고 완전 정지해서 다시 play하면 처음부터 음악이 나왔으면 하는데요...ㅠ
start가 다시 불리기전에 seekTo를 불러 맨 처음 부터 재생하시면 됩니다.
답변은 드리지만 추후를 위해서라도 무조건 물어보지 마시고, 링크 걸어드린 MediaPlayer API 부터 확인 하세요..

btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v)
            {


                if(MP.isPlaying()){
                btn1.setText("STOP");
                MP.pause();
                }
                else
        {

MP.seekTo(0); // 맨 처음 부터 재생하도록 이동하는 것입니다.
                btn1.setText("PLAY");
                MP.start();
                }

            }
        });
감사합니다. 그리고 링크까지 걸어드린 자료가 내용이 깨지고 볼 수가 없어서 이렇게 글을 올립니다. 또한 무조건 물어보는 건 아닙니다. 저 또한 이것저것 해보고 여기 저기 자료도 찾아가면서 하고 있는 중입니다. 이점에서는 제가 죄송합니다. 그리고 다시한번 감사드린다는 말씀을 전해드리겠습니다. 감사합니다.
...