음악재생 앱
- 백그라운드에서 기능 실행
- 음원 재생
- Device Event Catch (네트워크 상태 변경, 전원 연결, 배터리 사용량 체크 등..)
- MediaPlayer를 이용해 음원 재생
- Service를 이용해 음원 재생
- Notification에 음원 컨트롤러 제공
- BroadcastReceiver를 이용해 Low_Battery 이벤트 Catch
- 백그라운드에서 오래 실행되는 작업을수행할 수 있는 애플리케이션 구성 요소(UI 제공 X)
- 다른 애플리케이션 구성 요소(Activity, BroadcastReceiver 등)가 시작할 수 있으며, 유저가 다른 앱을 실행하더라도 백그라운드에서 계속 실행할 수 있도록 해준다
- 음악을 재생하거나 파일 I/O 와 같은 작업을 수행 가능
- 총 3가지 유형: 포그라운드, 백그라운드, 바인드
- 포그라운드: 백그라운드에서 실행은 맞지만 사용자에게 잘 보여야한다. 재생, 일시정지, 다음 곡, 이전 곡 등 사용자와 상호작용을 해야하기 때문에 이러한 서비스를 포그라운드 서비스라고 한다
- �음악을 재생하는 등의 서비스는 포그라운드 서비스를 이용하는 것이 좋다. 사용자가 알아야하는 서비스는 안드로이드가 임의로 서비스를 종료하지 않기 때문에
- 단순 백그라운드 서비스를 사용한다면 사용자와 상호작용이 없다고 간주하여 임의로 서비스가 종료될 수 있다
- 백그라운드: 사용자에게 직접 보이지 않는 작업 즉, 아예 보일 필요가 없는 작업을 의미한다
- 바인드: 포그라운드/백그라운드와는 다르게 서비스를 등록하는 곳, 그리고 서비스 2가지가 서로 통신이 가능하다. 즉, 양방향 통신을 가능하게 한다. 바인딩이 해제되면 서비스가 소멸되고, 바인딩이 생성되면 서비스가 생성된다
- 포그라운드: 백그라운드에서 실행은 맞지만 사용자에게 잘 보여야한다. 재생, 일시정지, 다음 곡, 이전 곡 등 사용자와 상호작용을 해야하기 때문에 이러한 서비스를 포그라운드 서비스라고 한다
- 상태표시줄을 아래로 내렸을 때 나오는 알림창들
- 포그라운드 서비스는 Notification이 필수
- PendingIntent
- Intent 객체 주변을 감싸는 래퍼
- 외부 애플리케이션에 권한을 허가하여 안에 들어있는 Intent를 마치 본인 앱의 자체 프로세스에서 실행하는 것처럼 사용하게 하는 것
- 본 프로젝트에서는 알림으로 어떠한 작업을 수행할 때 Intent가 실행되도록 선언
- Intent Flag
- Notification에서 알림 자체를 클릭했을 때 앱을 어떻게 실행할지
- 본 프로젝트에서는 flag = Intent.FLAG_ACTIVITY_SINGLE_TOP 사용. 즉, 실행됐던 Activity를 그대로 재사용 하겠다
- Android 앱에서 게시, 구독 디자인 패턴과 유사한 브로드캐스트 메시지를 받거나 보낼 수 있다
- 비행기 탑승 모드가 켜져있는지 아닌지, 배터리가 충분한지 아닌지 등을 받아올 수 있다