안드로이드 MediaController / MediaPlayer 제어하기
▣ 안드로이드 MddiaController / MediaPlayer 제어하기 |
■ MediaController는 미디어플레이어를 제어하는 객체인데요. 기본적으로 음악을 재생하고, 중지하고, 되감기, 뛰어넘기, 진행바 와 같은 툴을 제공합니다.
그리고 기본설정은 처음에는 나타나지 않다가 화면을 터치하면 나타나고, 사용하지 않으면 3초 후에 사라지게 설정이 되어 있습니다.
■ show(), hide()메서드를 사용해서 제어판을 나타나거나 사라지게 할 수 있고, setPrevNextListeners()를 호출해서 작성하면 이전(Previous), 다음(Next)가 나타납니다.
■ 이 예제에서는 간단한 이미지를 준비해서 배경으로 사용하고, RelativeLayout 안에 이미지뷰와 텍스트뷰를 배치해서 각각에 배경과 파일의 경로를 출력하도록 합니다.
■ xml파일을 살펴보겠습니다.
파일 내용을 보면 전체를 "Relativelayout"으로 묶고 객체들이 서로 겹치게 배치를 하고 있습니다. 이미지뷰를 화면에 꽉 차게 하고 준비한 이미지를 넣고 있습니다. 텍스트뷰는 상단에 배치하고, 나중에 오디오파일의 경로를 출력하게 될것입니다. MediaController를 하단에 위치하게 하고 있습니다.
■이제 액티비티 파일을 작성하도록 하겠습니다.
① 이 액티비티 파일은 기본적으로 Activity를 상속받고 나머지 두개의 클래스는 Implements로 선언하고 있습니다. OnPreparedListener는 미디어플레이어가 오디오파일을 준비했는지를 확인하는 리스너이고, MediaController.MediaPlayerControl는 버튼과 SeekBar를 제어할 수 있는 메서드들을 제공하는 기능을 합니다.
② MediaPlayer와 MediaController를 선언하고, 오디오 파일 경로 객체를 선언하고 있습니다.
③ 오디오 파일 경로를 전달받아서 텍스트뷰에 출력하도록 하고, 미디어 플레이어를 생성해서 스트림 유형은 오디오 스트림으로 설정하고 있습니다. 그리고 오디오 파일을 준비할 때는 "IOException"이 발생할 수 있기 때문에 try~catch 구문으로 작성해야 합니다. 미디어 플레이어에 파일 경로를 넣어주고, 데이터를 로드할 수 있게 prepare()메서드를 실행하고 있습니다.
■ 다음으로 OnPreparedListener에 대한 onPrepared()메서드를 정의하고, 액티비티에 대한 onStop()와 onTouchEvent()메서드를 정의하도록 하겠습니다.
① 미디어 플레이어가 준비가 되면 실행하는 메서드로, MediaController클래스를 생성하고, 제어판에 플레이어를 설정하고, 이것을 레이아웃에 배치했던 mediaController에 출력하도록 하고 있습니다. 실질적으로 제어를 하는 것은 지금 생성하는 것이고 레이아웃에 배치가 되어 있는것은 단지 위치만 잡기 위한것입니다.
② 동작을 멈출때 실행하는 메서드와 재생을 종료하는 구문이고, 터치 이벤트를 정의하고 있습니다. 이벤트 내용은 화면을 터치하면 컨트롤러가 나타나고, show(0)으로 하면 나타나면 계속 사라지지 않고 화면에 나타나게 되며, 사라지게 하려면 원하는 milisec를 넣어주면 됩니다. (예 : 5초=5000)
③ 다음으로 MediaController.MediaPlayerControl에 대한 메서드 들입니다. 중지버튼을 사용할 수 있게 하고, 진행바를 앞과 뒤로 이동 할 수 있도록 설정하고 있는 내용입니다.
■ 계속 이어서 나머지 메서드들도 살펴보겠습니다.
■ getCurrentPosition()은 현재 재생 지점을 구해서 진행바에 표시하도록 하는 메서드이고, getDuration()은 진행시간을 구하고, isPlaying()은 재생중인지 확인하고, pause()은 중지, seekTo()는 제어판의 진행바를 드래그 할때 실행하는 메서드입니다. start()는 제어판의 재생버튼을 클릭했을때 실행되는 메서드 입니다.
■ 이 프로젝트를 실행을 시켜보면 오디오 파일의 경로가 상단의 텍스트뷰에 나타나고, 아무곳이나 터치를 하면 제어판이 나타납니다. 재생, 진행바, 빨리감기, 되감기 기능이 제대로 작동 하고, 진행바를 원하는 위치로 옮기면 그 부분의 음악이 재생이 됩니다.