MediaPlayer vs AudioManager
MediaPlayer : 사운드 및 동영상 재생 AudioManager : 기기의 오디오 소스및 오디오 출력을 관리
필요 권한
<uses-permission android:name=“android.permission.INTERNET” />
WAKE_LOCK <uses-permission android:name=“android.permission.WAKE_LOCK” /> 화면 어두워지는 것 방지, 절전모드 들어가는 것 방지하려면 MediaPlayer.setScreenOnWhilePlaying()이나 MediaPlayer.setWakeMode() 메서드를 사용할 경우 필요
로컬 리소소
처음부터 /res/raw 에 넣어놓은 mp3
var mediaPlayer: MediaPlayer? = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer?.start() // no need to call prepare(); create() does that for you
콘텐츠 리졸버에서 가져올 수 있는 것과 같은 내부 URI
val myUri: Uri = .... // initialize Uri here
val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
setAudioStreamType(AudioManager.STREAM_MUSIC)
setDataSource(applicationContext, myUri)
prepare()
start()
}
외부 URL 스트리밍도 가능
val url = "http://........" // your URL here
val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
setAudioStreamType(AudioManager.STREAM_MUSIC)
setDataSource(url)
prepare() // might take long! (for buffering, etc)
start()
}
비동기 호출
prepare() -> prepareAsync() 콜백 함수를 이용할 것 setOnPreparedListener() 를 통해 구성할 수 있음 MediaPlayer.OnPreparedListener 의 onPrepared() 에서 처리
상태관리
setDataSource() 를 호출하면 초기화상태로 가고. 이때 prepare() 를 하고 완료되면 준비상태가 된다. 이제 start() 를 호출
이 시점에, pause(), seekTo() 호출가능 playbackCompleted 상태는 재생끝난 상태…
stop() 을 호출하면 MediaPlayer를 다시 준비할 때까지 start() 사용 못함
해제
release() onStop() 이 호출되면 해제하도록…
mediaPlayer?.release()
mediaPlayer = null