Home | History | Annotate | Download | only in features
      1 page.title=Gambar-dalam-gambar
      2 page.keywords=pratinjau,sdk,PIP,Gambar-dalam-gambar
      3 page.tags=androidn
      4 
      5 @jd:body
      6 
      7 <div id="qv-wrapper">
      8 <div id="qv">
      9 
     10 <h2>Dalam dokumen ini</h2>
     11 <ol>
     12   <li><a href="#declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung
     13 Gambar-dalam-gambar</a></li>
     14   <li><a href="#pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</a>
     15 </li>
     16   <li><a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>
     17 </li>
     18   <li><a href="#continuing_playback">Melanjutkan Pemutaran Video Saat dalam
     19 Gambar-dalam-gambar</a></li>
     20   <li><a href="#single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
     21  Gambar-dalam-gambar</a></li>
     22   <li><a href="#best">Praktik Terbaik</a></li>
     23 </ol>
     24 
     25 <h2>Lihat Juga</h2>
     26 <ol>
     27   <li><a href="{@docRoot}preview/features/multi-window.html">Dukungan
     28 Multi-Jendela</a></li>
     29 </ol>
     30 
     31 </div>
     32 </div>
     33 
     34 <p>Di Android N, pengguna Android TV sekarang bisa menonton video
     35 dalam jendela yang disematkan di sudut layar saat menyusuri
     36 aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas
     37 video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di
     38 latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang
     39 membantu pengguna menjadi lebih produktif.</p>
     40 
     41 <p>Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh
     42 kapan memasuki mode PIP:</p>
     43 
     44 <ul>
     45 <li>Aplikasi Anda bisa memindahkan video ke dalam mode PIP bila pengguna mengarah
     46 mundur dari video untuk menjelajah materi lainnya.</li>
     47 <li>Aplikasi Anda bisa mengalihkan video ke dalam mode PIP selagi pengguna menonton akhir episode
     48 dari materi. Layar utama menampilkan informasi
     49 promosi atau rangkuman tentang episode berikutnya dalam seri tersebut.</li>
     50 <li>Aplikasi Anda bisa menyediakan suatu cara bagi pengguna untuk mengantre materi tambahan selagi
     51 mereka menonton video. Video terus dimainkan dalam mode PIP selagi layar
     52 utama menampilkan aktivitas pemilihan materi.</li>
     53 </ul>
     54 
     55 <p>Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu
     56 dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan
     57 menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela
     58 PIP, dengan menekan dan menahan tombol <b>Beranda</b> pada remote. Jika video
     59 lain mulai diputar pada layar utama, jendela PIP secara otomatis
     60 ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.</p>
     61 
     62 <img src="{@docRoot}preview/images/pip-active.png" />
     63 <p class="img-caption"><strong>Gambar 1.</strong> Video
     64 Gambar-dalam-gambar terlihat di sudut layar selagi pengguna menjelajahi materi pada layar
     65 utama.</p>
     66 
     67 <p>PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk
     68 menyediakan jendela hamparan video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus
     69 mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila
     70 diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila
     71 aktivitas dalam mode PIP.</p>
     72 
     73 <h2 id="declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar</h2>
     74 
     75 <p>Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi.
     76 Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas
     77 video Anda dalam manifes dengan menyetel
     78 <code>android:supportsPictureInPicture</code> dan
     79 <code>android:resizeableActivity</code> ke <code>true</code>. Juga, tetapkan
     80 bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas
     81 Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.</p>
     82 
     83 <pre>
     84 &lt;activity android:name="VideoActivity"
     85     android:resizeableActivity="true"
     86     android:supportsPictureInPicture="true"
     87     android:configChanges=
     88         "screenSize|smallestScreenSize|screenLayout|orientation"
     89     ...
     90 </pre>
     91 
     92 <p>Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas
     93 Anda akan ditampilkan pada jendela hamparan kecil pada layar TV. Aktivitas
     94 pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang
     95 mengandung elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik
     96 ketika beralih ke mode PIP, karena pengguna tidak dapat melihat elemen UI secara jelas
     97 di jendela PIP.</p>
     98 
     99 <h2 id="pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</h2>
    100 
    101 Bila Anda perlu untuk mengalihkan aktivitas ke mode PIP, panggil
    102 <code>Activity.enterPictureInPictureMode()</code>. Contoh berikut mengalihkan
    103 ke mode PIP bila pengguna memilih tombol PIP khusus pada baris
    104 kontrol media:</p>
    105 
    106 <pre>
    107 &#64;Override
    108 public void onActionClicked(Action action) {
    109     if (action.getId() == R.id.lb_control_picture_in_picture) {
    110         getActivity().enterPictureInPictureMode();
    111         return;
    112     }
    113     ...
    114 </pre>
    115 
    116 <p>Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih
    117 ke mode PIP selagi mengontrol pemutaran video.</p>
    118 
    119 <img src="{@docRoot}preview/images/pip-button.png" />
    120 <p class="img-caption"><strong>Gambar 1.</strong> Tombol
    121 gambar-dalam-gambar pada baris kontrol media.</p>
    122 
    123 <p>Android N menyertakan kelas
    124 <code>PlaybackControlsRow.PictureInPictureAction</code> baru yang mendefinisikan
    125 tindakan PIP baris kontrol dan menggunakan ikon PIP.</p>
    126 
    127 <h2 id="handling_ui">Menangani UI Selama Gambar-dalam-gambar</h2>
    128 
    129 <p>Bila aktivitas memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran
    130 video. Buang elemen UI sebelum aktivitas Anda memasuki PIP,
    131 dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi.
    132 Ganti <code>Activity.onPictureInPictureModeChanged()</code> atau
    133 <code>Fragment.onPictureInPictureModeChanged()</code> dan aktifkan atau
    134 nonaktifkan elemen UI saat diperlukan, misalnya:</p>
    135 
    136 <pre>
    137 &#64;Override
    138 public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
    139     if (isInPictureInPictureMode) {
    140         // Hide the controls in picture-in-picture mode.
    141         ...
    142     } else {
    143         // Restore the playback UI based on the playback status.
    144         ...
    145     }
    146 }
    147 </pre>
    148 
    149 <h2 id="continuing_playback">Melanjutkan Pemutaran Video Saat dalam
    150 Gambar-dalam-gambar</h2>
    151 
    152 <p>Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam
    153 keadaan berhenti sementara, dan akan memanggil metode <code>onPause()</code> aktivitas Anda. Pemutaran
    154 video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut
    155 berhenti sementara karena mode PIP. Periksa PIP dalam metode
    156 <code>onPause()</code> aktivitas Anda dan tangani pemutaran dengan tepat,
    157 misalnya:</p>
    158 
    159 <pre>
    160 &#64;Override
    161 public void onPause() {
    162     // If called while in PIP mode, do not pause playback
    163     if (isInPictureInPictureMode()) {
    164         // Continue playback
    165         ...
    166     }
    167     // If paused but not in PIP, pause playback if necessary
    168     ...
    169 }
    170 </pre>
    171 
    172 <p>Bila aktivitas meninggalkan mode PIP dan kembali ke mode layar penuh, sistem
    173 akan melanjutkan aktivitas Anda dan memanggil metode <code>onResume()</code>.</p>
    174 
    175 <h2 id="single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
    176  Gambar-dalam-gambar</h2>
    177 
    178 <p>Di aplikasi Anda, seorang pengguna bisa memilih video baru saat menyusuri materi di
    179 layar utama, selagi aktivitas pemutaran video dalam mode PIP. Putar
    180 video baru di aktivitas pemutaran yang ada dalam mode layar penuh, sebagai ganti
    181 meluncurkan aktivitas baru yang dapat membingungkan pengguna.</p>
    182 
    183 <p>Guna memastikan aktivitas tunggal digunakan untuk permintaan pemutaran video dan
    184 beralih ke atau dari mode PIP bila dibutuhkan, setel
    185 <code>android:launchMode</code> aktivitas ke <code>singleTask</code> dalam manifes Anda:
    186 </p>
    187 
    188 <pre>
    189 &lt;activity android:name="VideoActivity"
    190     ...
    191     android:supportsPictureInPicture="true"
    192     android:launchMode="singleTask"
    193     ...
    194 </pre>
    195 
    196 <p>Di aktivitas Anda, ganti {@link android.app.Activity#onNewIntent
    197 Activity.onNewIntent()} dan tangani video baru, yang akan menghentikan pemutaran video
    198 jika diperlukan.</p>
    199 
    200 <h2 id="best">Praktik Terbaik</h2>
    201 
    202 <p>PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan
    203 aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain materi video.
    204 Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan
    205 dalam <a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>.</p>
    206 
    207 <p>Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut
    208 layar, Anda harus menghindari menampilkan informasi penting di layar utama
    209 di area mana saja yang bisa terhalang oleh jendela PIP.</p>
    210 
    211 <p>Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus masukan. Untuk
    212 menerima kejadian masukan saat dalam mode PIP, gunakan
    213 <code>MediaSession.setMediaButtonReceiver()</code>.</p>
    214