Membuat aktivitas pemutar video

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

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

Kode onCreate() di bawah ini menunjukkan langkah-langkah tersebut:

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 media, Anda harus menghentikannya sebelum aktivitasnya menghilang. Pilihan callback yang akan digunakan bergantung pada versi Android yang Anda jalankan.

Di Android 6.0 (API level 23) dan yang lebih lama, tidak ada jaminan kapan onStop() akan dipanggil; panggilan dapat dilakukan 5 detik setelah aktivitas menghilang. Oleh karena itu, di Android versi 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, jadi 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 melepas dan membersihkan pemutar.