728x90
반응형
참고 교재 : Joyce의 안드로이드 앱 프로그래밍 - 홍정아
전체 코드가 궁금하다면 아래 링크를 참고하시길 바랍니다.
원본 코드 : Joyce의 안드로이드 앱 프로그래밍 - 홍정아
이번에 해볼 프로젝트는 뮤직 플레이어입니다.
프로젝트 진행 전 알아야할 사전지식1에 대해 정리하는 글입니다.
학습 목표 : 음악 재생, 일시정지, 앱이 종료되더라도 음악을 계속 재생하는 방법을 배우게 됩니다.
- MediaPlayer API
- Service(안드로이드 4대 구성요소)
- 사전 지식 : 오디오 재생 MediaPlayer API
- MediaPlayer API는 다양한 유형의 미디어 재생을 지원합니다. 방법은 Raw와 URI가 있습니다.
- Raw 리소스를 사용해 재생하기
- res → raw 에 사용할 mp3를 넣어서 사용
- URI를 사용해 재생하기
- 기기 안에 들어있는 오디오 파일의 위치를 알려주는 URI를 사용해 재생
- URI = Uniform Resource Identifier, 텍스트 이미지 영상 등 자원의 주소를 표현하는 형식 → URL은 URI의 일종
- 기기 안에 들어있는 오디오 파일의 위치를 알려주는 URI를 사용해 재생
- Raw 리소스를 사용해 재생하기
- MediaPlayer API는 다양한 유형의 미디어 재생을 지원합니다. 방법은 Raw와 URI가 있습니다.
- MediaPlayer 클래스에서 지원하는 함수
- 파일 준비하기 : 파일 로드 함수 = prepare(), prepareAsync(), setDataResource()
- prepare() : 메인 스레드에서 실행
- prepareAsync() :백그라운드 스레드에서 실행
- prepare()은 메인 스레드에서 실행되기 때문에 영상이나 음원이 너무 크면 ANR을 유발할 수 있습니다. 반면 prepareAsync()에서는 백그라운드 스레드를 사용하기 때문에 ANR 문제가 발생하지 않는 장점이 있습니다. 또한 onPreparedListener를 등록하여 음악 준비 완료 시점 파악 가능합니다.
- ANR(Application Not Responding, 앱 응답 없음)
- prepare()은 메인 스레드에서 실행되기 때문에 영상이나 음원이 너무 크면 ANR을 유발할 수 있습니다. 반면 prepareAsync()에서는 백그라운드 스레드를 사용하기 때문에 ANR 문제가 발생하지 않는 장점이 있습니다. 또한 onPreparedListener를 등록하여 음악 준비 완료 시점 파악 가능합니다.
- 파일 준비하기 : 파일 로드 함수 = prepare(), prepareAsync(), setDataResource()
- 파일 재생하기 : start() 재생, pause() 일시정지
- 파일 멈추기 : reset() 함수를 호출해 멈출 수 있습니다. MediaPlayer 객체도 초기화 가능합니다.
- 음악 길이 찾기 : getDuration() 함수로 음악의 길이 확인, 밀리초(ms)
- 특정 구간으로 이동하기 : seekTo() 함수로 특정 위치로 이동합니다.
- 자원 해제하기 : release() 함수를 통해 사용한 메모리와 자원 해제, MediaPlayer를 사용하지 않는다면 반드시 호출해야합니다.
※ 본 게시글은 'Joyce의 안드로이드 앱 프로그래밍 - 홍정아' 책의 내용과
Android Developers의 공식문서 내용을 참고하여 작성하였습니다.
전체 코드가 궁금하다면 아래 링크를 참고하시길 바랍니다.
728x90
반응형
'안드로이드(Android)' 카테고리의 다른 글
뮤직 플레이어(MusicPlayer)_3 [Android_Kotlin] (0) | 2023.02.17 |
---|---|
뮤직 플레이어(MusicPlayer)_2 [Android_Kotlin] (0) | 2023.02.16 |
스톱워치(StopWatch)_3 / [Android-Kotlin] (0) | 2023.02.13 |
스톱워치(StopWatch)_2 / [Android-Kotlin] (0) | 2023.02.10 |
스톱워치(StopWatch)_1 / [Android-Kotlin] (0) | 2023.02.10 |