동영상 플레이어 활동 빌드

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

활동은 onCreate() 수명 주기 콜백 메서드를 수신하면 다음 단계를 실행해야 합니다.

  • 미디어 세션을 만들고 초기화합니다.
  • 미디어 세션 콜백을 설정합니다.
  • 플레이어가 보이지 않을 때 미디어 버튼 이벤트가 플레이어를 다시 시작하지 않도록 미디어 세션의 미디어 버튼 수신기를 null로 설정합니다. Android 5.0(API 레벨 21) 이상의 기기에만 영향을 줍니다.
  • 미디어 컨트롤러를 만들고 초기화합니다.

onCreate() 코드는 다음 단계를 보여줍니다.

Kotlin

    private lateinit var mediaSession: MediaSessionCompat

    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Create a MediaSessionCompat
        mediaSession = MediaSessionCompat(this, LOG_TAG).apply {

            // Enable callbacks from MediaButtons and TransportControls
            setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or
                    MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)

            // Do not let MediaButtons restart the player when the app is not visible
            setMediaButtonReceiver(null)

            // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
            val stateBuilder = PlaybackStateCompat.Builder()
                    .setActions(PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PLAY_PAUSE)
            setPlaybackState(stateBuilder.build())

            // MySessionCallback has methods that handle callbacks from a media controller
            setCallback(MySessionCallback())
        }

        // Create a MediaControllerCompat
        MediaControllerCompat(this, mediaSession).also { mediaController ->
            MediaControllerCompat.setMediaController(this, mediaController)
        }
    }
    

자바

    MediaSessionCompat mediaSession;
    PlaybackStateCompat.Builder stateBuilder;

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      // Create a MediaSessionCompat
      mediaSession = new MediaSessionCompat(this, LOG_TAG);

      // Enable callbacks from MediaButtons and TransportControls
      mediaSession.setFlags(
        MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
        MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

      // Do not let MediaButtons restart the player when the app is not visible
      mediaSession.setMediaButtonReceiver(null);

      // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
      stateBuilder = new PlaybackStateCompat.Builder()
                    .setActions(
                        PlaybackStateCompat.ACTION_PLAY |
                        PlaybackStateCompat.ACTION_PLAY_PAUSE);
      mediaSession.setState(stateBuilder.build());

      // MySessionCallback has methods that handle callbacks from a media controller
      mediaSession.setCallback(new MySessionCallback());

      // Create a MediaControllerCompat
      MediaControllerCompat mediaController =
        new MediaControllerCompat(this, mediaSession);

      MediaControllerCompat.setMediaController(this, mediaController);
    }
    

앱이 닫히면 활동은 onPause()onStop() 콜백을 연속으로 수신합니다. 플레이어가 재생 중인 경우 활동이 사라지기 전에 플레이어를 중지해야 합니다. 어떤 콜백을 사용할지는 실행 중인 Android 버전에 따라 다릅니다.

Android 6.0(API 레벨 23) 이하에서는 onStop()의 호출 시점이 보장되지 않습니다. 활동이 사라지고 5초 후에 호출될 수 있습니다. 따라서 Android 버전 7.0 이전에서는 앱이 onPause()에서 재생을 중지해야 합니다. Android 7.0 이상에서는 활동이 표시되지 않는 즉시 시스템에서 onStop()을 호출하므로 문제가 되지 않습니다.

요약:

  • Android 버전 6.0 이하에서는 onPause() 콜백에서 플레이어를 중지합니다.
  • Android 버전 7.0 이상에서는 onStop() 콜백에서 플레이어를 중지합니다.

활동은 onDestroy() 콜백을 수신하면 플레이어를 해제 및 정리해야 합니다.