3개의 버튼을 Java 클래스의 Button 형 인스턴스에 연결하고 클릭할 때 곧이어 정의 할 updateActivity 함수가 호출되도록 합니다.
Java 클래스에는 재생 상태와 관련된 4가지 상수를 정의하고 있습니다.
PLAYER_INIT: 앱이 실행되고 재생 관련 함수에서는 아직 아무것도 수행하지 않은 상태입니다.
PLAYER_STOP: 소리 재생이 중지된 상태입니다.
PLAYER_PLAY: 소리가 재생중인 상태입니다.
PLAYER_PAUSE: 소리 재생이 일시중지된 상태입니다.
package com.example.audiotest;
public class MainActivity extends Activity
{
private static final int PLAYER_INIT = 0; // 처음 상태
private static final int PLAYER_STOP = 1; // 중지 상태
private static final int PLAYER_PLAY = 2; // 재생 상태
private static final int PLAYER_PAUSE = 3; // 일시정지 상태
private MediaPlayer mediaPlayer = null; // 미디어 재생 클래스
private int mediaPlayerStatus = PLAYER_INIT; // 액티비티의 처음 상태
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 새로 설정할 재생 상태
switch (mediaPlayerStatus)
{
case PLAYER_PLAY:
// 액티비티의 현재 상태와 새로 설정할 상태를 비교
switch (this.mediaPlayerStatus)
{
case PLAYER_PLAY: // 이미 재생중인데 또 재생을 누른 경우 아무 작업 안 함
break;
case PLAYER_STOP: // 정지였다가 재생을 누른 경우 처음부터 재생 (MediaPlayer 생명주기 참조)
try
{
this.mediaPlayer.prepare();
this.mediaPlayer.seekTo(0);
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mediaPlayer.start();
break;
case PLAYER_PAUSE: // 일시정지였는데 재생을 누른 경우 이어서 재생
this.mediaPlayer.start();
break;
case PLAYER_INIT: // 맨 처음상태에서 재생을 누른 경우 마찬가지로 재생
this.mediaPlayer.start();
break;
}
break;
case PLAYER_STOP:
switch (this.mediaPlayerStatus)
{
case PLAYER_PLAY: // 재생 중이었는데 정지를 누른 경우
this.mediaPlayer.stop();
break;
case PLAYER_STOP: // 정지 상태에서 또 정지 누른 경우
break;
case PLAYER_PAUSE: // 일시정지 상태에서 정지 누른 경우
this.mediaPlayer.stop();
break;
case PLAYER_INIT: // 맨 처음 상태에서 정지를 누른 경우
break;
}
break;
case PLAYER_PAUSE:
switch (this.mediaPlayerStatus)
{
case PLAYER_PLAY: // 재생 중이었는데 일시정지를 누른 경우
this.mediaPlayer.pause();
break;
case PLAYER_STOP: // 정지였는데 일시정지를 누른 경우
break;
case PLAYER_PAUSE: // 일시정지인데 또 일시정지를 누른 경우
break;
case PLAYER_INIT: // 맨 처음상태에서 일시정지를 누른 경우
break;
}
break;
}
this.mediaPlayerStatus = mediaPlayerStatus; // 이 액티비티의 재생 상태를 새로 받은 상태로 변경
}