Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)

여러분의 음악을 정지시키는 것과 같은 기능은 먼 얘기가 아닙니다 안드로이드는 이를 위한 여러 방법을 제공해왔죠 몇 가지 얘기하자면 화면 제어 잠금과 알림을 위한 미디어 제어 그리고 안드로이드 웨어, 그리고 심지어 안드로이드 오토도 있습니다 이렇게 좋은 기능을 여러분의 오디오 앱에서 어떻게 사용해야 할까요? MediaSessionCompat를 사용하면 간단합니다 여러분을 위하여 안드로이드와 통합된 많은 작업을 할 수 있는 안드로이드 지원 라이브러리를 통하여 하나의 API를 이용할 수 있습니다 저는 이안 레이크입니다 이제 MediaSessionCompat를 살펴보고 여러분의 미디어 메타데이터를 가지고 어디에서든지 제어할 수 있는 방법을 알아볼 것입니다 여러분의 미디어 재생의 대표로서 미디어 세션을 생각해 보시길 바랍니다 오디오, 비디오 심지어 구글 캐스트에서 먼 거리로 재생하더라도 시스템에 여러분이 하는 걸 알려주지 않으면 도움을 줄 수 없습니다 하지만 여러분을 도울 수 있는 많은 방법을 제공합니다 앨범아트와 아티스트 이름과 같은 메타데이터를 게시한다면 여러분이 지원하는 재생과 일시중지와 같은 미디어 제어를 알려줍니다 하지만 이에 대해 다루기에 앞서 시작을 제어하기 위해 MediaSessionCompat 객체를 생성해봅시다 또한, 롤리팝 이전에 안드로이드 버전에서 미디어 버튼 수신기를 생성하는 하나의 예비 단계가 필요합니다 블루투스 헤드셋과 안드로이드 웨어에서 미디어 제어를 제공하며 안드로이드 50 이전의 장치에서 여러분의 앱으로 전달할 수 있습니다 단순한 브로드캐스트 수신기입니다 이렇게 매니페스트에 등록하고 여러분의 앱을 위한 액션으로 수신 키 이벤트를 변형시킵니다 일반적으로, 실제로 일시 정지를 이동시키고 재생 명령을 여러분의 미디어 재생을 제어할 수 있는 서비스로 보내는 것입니다 예시로 우리의 훈련 문서를 보겠습니다 자, MediaSessionCompat가 있습니다 컨텍스트가 필요한데요 디버깅 태그로 제공되는 문자열과 여러분의 미디어 버튼 수신기의 구성요소 이름입니다 마지막 널은 대기중인 인텐트입니다 안드로이드 4

3에 있는 구성요소의 이름 대신에 사용할 수 있습니다 이렇게 생성되는데, 널을 통과하게 되면 일반적으로 올바르게 작동되는 것입니다 더 진행하기에 앞서서 세 가지를 해야 할 겁니다 적절한 플래그를 설정해야 합니다 미디어 버튼 제어가 있는데요 이러한 미디어 버튼 이벤트를 우리의 앱으로 보냅니다 그 다음, 콜백을 설정합니다 롤리팝과 더 높은 장치가 콜백을 사용하여 버튼을 눌렀을 때 재생, 일시 정지 그리고 다른 작동을 할 것입니다 마지막으로 무언가를 재생할 때 활성화할 세션을 설정합니다 여러분의 앱에서 미디어 버튼 경로와 다른 제어가 있는 시스템의 신호입니다 자, 플럼빙이 설정되었고 작동될 준비가 되었습니다 하지만 우리의 미디어 세션이 미디어를 재생시킬 수 있는지는 아직 모릅니다 어떤 것이 재생되고 어떤 제어를 지원하는지 알 수 있을까요? 첫 번째 부분은 MediaMetadataCompat에서 처리됩니다 이는 빌더 패턴을 사용하며 여러분은 가지고 있는 모든 정보를 추가할 수 있습니다 그 다음에 여러분의 미디어 세션에서 setMetadata를 호출합니다 하지만 여전히 미디어 제어가 없습니다 우리가 아직 다른 부분을 처리하기 않았기 때문입니다 재생 상태를 게시하지 않았기 때문이죠 PlaybackStateCompat은 두 개의 목적을 가지고 있습니다 setState 메소드를 통하여 설정된 재생과 일시 중지 또는 버퍼링과 같은 현재의 상태와 setActions 메소드를 통해 설정된 중지 또는 일시 정지, 재생 정지와 같은 현재의 액션이 있습니다 이러한 두 가지를 포함합니다 일반적으로 액션은 상태와 동시에 변경되기 때문입니다 중지 상태는 일시 정지 액션을 가지고 있지 않을 것입니다 예를 들면 말입니다 MediaSessionCompat이 작동되기에 충분합니다 통합된 미디어와 모든 API 8과 더 높은 장치, 그리고 아이스크림 샌드위치, 젤리 빈, 그리고 킷캣 장치를 위한 잠금 화면 제어의 블루투스 버튼을 보실 수 있을 겁니다 MediaSessionCompat이 NotificationCompat과 API14 그리고 더 높은 장치에서 특히 인라인 미디어 제어를 포함한 모든 API 레벨에서 여러분에게 훌륭한 미디어 알림을 제공하는 AppCompat 지원 라이브러리에 속한 MediaStyle과 잘 작동되고 있는 것도 보실 수 있을 겁니다 여러분의 미디어 세션에서 특별히 독특한 미디어 세션 토큰이 있는 SetMediaSession를 호출하는 것만 기억하시면 됩니다 이를 통하여 안드로이드 웨어에 미디어 세션을 연결시킵니다 그리고 안드로이드 50과 더 높은 장치를 위한 웨어의 미디어 제어를 제공합니다 미디어 세션을 완료했을 때 배포를 하는 것을 잊지 마시길 바랍니다 정말로, 잊지 마시길 바랍니다 아직 MediaSessionCompat에 대해서만 다뤄 봤습니다 미디어 브라우저 또는 미디어 컨트롤러나 미디어 세션의 상단에 만들 수 있는 전체 호스트를 아직 다루지는 않았습니다 하지만 이로 인해서 여러분이 시작할 수 있을 겁니다 여러분의 미디어 재생 정보와 재생 제어를 어디에서나 재생할 수 있습니다 MediaSessionCompat를 사용하여 여러분의 멋진 미디어를 볼 수 있기를 기대하고 있으며 여러분이 더 나은 앱을 가질 수 있도록 도움이 되었기를 바랍니다 그리고 배포하시길 바랍니다