page.title=Gambar-dalam-gambar page.keywords=pratinjau,sdk,PIP,Gambar-dalam-gambar page.tags=androidn @jd:body

Dalam dokumen ini

  1. Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar
  2. Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar
  3. Menangani UI Selama Gambar-dalam-gambar
  4. Melanjutkan Pemutaran Video Saat dalam Gambar-dalam-gambar
  5. Menggunakan Aktivitas Pemutaran Tunggal untuk Gambar-dalam-gambar
  6. Praktik Terbaik

Lihat Juga

  1. Dukungan Multi-Jendela

Di Android N, pengguna Android TV sekarang bisa menonton video dalam jendela yang disematkan di sudut layar saat menyusuri aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang membantu pengguna menjadi lebih produktif.

Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh kapan memasuki mode PIP:

Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela PIP, dengan menekan dan menahan tombol Beranda pada remote. Jika video lain mulai diputar pada layar utama, jendela PIP secara otomatis ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.

Gambar 1. Video Gambar-dalam-gambar terlihat di sudut layar selagi pengguna menjelajahi materi pada layar utama.

PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk menyediakan jendela hamparan video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila aktivitas dalam mode PIP.

Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar

Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi. Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas video Anda dalam manifes dengan menyetel android:supportsPictureInPicture dan android:resizeableActivity ke true. Juga, tetapkan bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.

<activity android:name="VideoActivity"
    android:resizeableActivity="true"
    android:supportsPictureInPicture="true"
    android:configChanges=
        "screenSize|smallestScreenSize|screenLayout|orientation"
    ...

Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas Anda akan ditampilkan pada jendela hamparan kecil pada layar TV. Aktivitas pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang mengandung elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik ketika beralih ke mode PIP, karena pengguna tidak dapat melihat elemen UI secara jelas di jendela PIP.

Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar

Bila Anda perlu untuk mengalihkan aktivitas ke mode PIP, panggil Activity.enterPictureInPictureMode(). Contoh berikut mengalihkan ke mode PIP bila pengguna memilih tombol PIP khusus pada baris kontrol media:

@Override
public void onActionClicked(Action action) {
    if (action.getId() == R.id.lb_control_picture_in_picture) {
        getActivity().enterPictureInPictureMode();
        return;
    }
    ...

Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih ke mode PIP selagi mengontrol pemutaran video.

Gambar 1. Tombol gambar-dalam-gambar pada baris kontrol media.

Android N menyertakan kelas PlaybackControlsRow.PictureInPictureAction baru yang mendefinisikan tindakan PIP baris kontrol dan menggunakan ikon PIP.

Menangani UI Selama Gambar-dalam-gambar

Bila aktivitas memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran video. Buang elemen UI sebelum aktivitas Anda memasuki PIP, dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi. Ganti Activity.onPictureInPictureModeChanged() atau Fragment.onPictureInPictureModeChanged() dan aktifkan atau nonaktifkan elemen UI saat diperlukan, misalnya:

@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
    if (isInPictureInPictureMode) {
        // Hide the controls in picture-in-picture mode.
        ...
    } else {
        // Restore the playback UI based on the playback status.
        ...
    }
}

Melanjutkan Pemutaran Video Saat dalam Gambar-dalam-gambar

Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam keadaan berhenti sementara, dan akan memanggil metode onPause() aktivitas Anda. Pemutaran video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut berhenti sementara karena mode PIP. Periksa PIP dalam metode onPause() aktivitas Anda dan tangani pemutaran dengan tepat, misalnya:

@Override
public void onPause() {
    // If called while in PIP mode, do not pause playback
    if (isInPictureInPictureMode()) {
        // Continue playback
        ...
    }
    // If paused but not in PIP, pause playback if necessary
    ...
}

Bila aktivitas meninggalkan mode PIP dan kembali ke mode layar penuh, sistem akan melanjutkan aktivitas Anda dan memanggil metode onResume().

Menggunakan Aktivitas Pemutaran Tunggal untuk Gambar-dalam-gambar

Di aplikasi Anda, seorang pengguna bisa memilih video baru saat menyusuri materi di layar utama, selagi aktivitas pemutaran video dalam mode PIP. Putar video baru di aktivitas pemutaran yang ada dalam mode layar penuh, sebagai ganti meluncurkan aktivitas baru yang dapat membingungkan pengguna.

Guna memastikan aktivitas tunggal digunakan untuk permintaan pemutaran video dan beralih ke atau dari mode PIP bila dibutuhkan, setel android:launchMode aktivitas ke singleTask dalam manifes Anda:

<activity android:name="VideoActivity"
    ...
    android:supportsPictureInPicture="true"
    android:launchMode="singleTask"
    ...

Di aktivitas Anda, ganti {@link android.app.Activity#onNewIntent Activity.onNewIntent()} dan tangani video baru, yang akan menghentikan pemutaran video jika diperlukan.

Praktik Terbaik

PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain materi video. Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan dalam Menangani UI Selama Gambar-dalam-gambar.

Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut layar, Anda harus menghindari menampilkan informasi penting di layar utama di area mana saja yang bisa terhalang oleh jendela PIP.

Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus masukan. Untuk menerima kejadian masukan saat dalam mode PIP, gunakan MediaSession.setMediaButtonReceiver().