Membuat aktivitas pemutar video

Saat menerima metode callback siklus proses onCreate(), aktivitas harus melakukan langkah-langkah berikut:

  • Membuat dan menginisialisasi sesi media
  • Menetapkan callback sesi media
  • Setel penerima tombol media sesi media ke null sehingga peristiwa tombol media tidak akan memulai ulang pemutar saat tidak terlihat. Hal ini hanya memengaruhi perangkat Android 5.0 (level API 21) dan yang lebih tinggi.
  • Membuat dan menginisialisasi pengontrol media

Kode onCreate() berikut menunjukkan langkah-langkah ini:

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)
    }
}

Java

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);
}

Saat aplikasi ditutup, aktivitas akan menerima callback onPause() dan onStop() secara berurutan. Jika pemutar sedang memutar, Anda harus menghentikannya sebelum aktivitasnya hilang. Pilihan callback yang akan digunakan bergantung pada versi Android yang Anda jalankan.

Di Android 6.0 (API level 23) dan yang lebih rendah, tidak ada jaminan kapan onStop() dipanggil; metode ini dapat dipanggil 5 detik setelah aktivitas Anda menghilang. Oleh karena itu, di versi Android sebelum 7.0, aplikasi Anda harus menghentikan pemutaran di onPause(). Di Android 7.0 dan yang lebih baru, sistem akan memanggil onStop() segera setelah aktivitas tidak terlihat, sehingga hal ini tidak menjadi masalah.

Ringkasnya:

  • Di Android versi 6.0 dan yang lebih lama, hentikan pemutar di callback onPause().
  • Di Android versi 7.0 dan yang lebih baru, hentikan pemutar di callback onStop().

Saat menerima callback onDestroy(), aktivitas harus merilis dan membersihkan pemutar Anda.