Android 8.0 (API level 26) permite lansarea activităților în modul picture-in-picture (PIP). PIP este un tip special de mod multi-fereastră folosit mai ales pentru video playback.It permite utilizatorului să vizioneze un videoclip într-o fereastră mică fixată într-un colț al ecranului în timp ce navighează între aplicații sau navighează conținut pe ecranul principal.
PIP utilizează API-urile cu mai multe ferestre disponibile în Android 7.0 pentru a oferi fereastra de suprapunere video fixată. Pentru a adăuga PIP în aplicația dvs., trebuie să vă înregistrați activitățile care acceptă PIP, să comutați activitatea în modul PIP în funcție de necesități și să vă asigurați că elementele UI sunt ascunse și redarea video continuă atunci când activitatea este în modul PIP.
fereastra PIP apare în stratul superior al ecranului, într-un colț ales de sistem. Puteți trage fereastra PIP într-o altă locație., Când apăsați pe fereastră apar două controale speciale: o comutare pe ecran complet (în centrul ferestrei) și un buton de închidere (Un „X” în colțul din dreapta sus).aplicația dvs. controlează când activitatea curentă intră în modul PIP. Iată câteva exemple:
- o activitate poate intra în modul PIP atunci când utilizatorul atinge butonul home sau recentsbutton pentru a alege o altă aplicație. (Acesta este modul în care Google Maps continuă să afișeze indicații de orientare, în timp ce utilizatorulruns o altă activitate în același timp.)
- aplicația dvs. poate muta un videoclip în modul PIP atunci când utilizatorul navigheazăînapoi de la videoclip pentru a răsfoi alt conținut.,
- aplicația dvs. poate comuta un videoclip în modul PIP în timp ce un utilizator urmărește sfârșitul unui episod de conținut. Ecranul principal afișează promoționale sau rezumateinformații despre următorul episod din serie.
- aplicația dvs. poate oferi utilizatorilor o modalitate de a face coadă la conținut suplimentar în timp ce vizionează un videoclip. Videoclipul continuă să fie redat în modul PIP, în timp ce ecranul principal afișează o activitate de selectare a conținutului.
declararea suportului picture-in-picture
în mod implicit, sistemul nu acceptă automat PIP pentru aplicații.,Dacă doriți suport PIP în aplicația, înregistrați-vă videoactivity în manifest prin setareaandroid:supportsPictureInPicture
și true
. De asemenea, specificați faptul că activitatea dvs. gestionează modificările de configurare a aspectului, astfel încât activitatea dvs. să nu se relanseze atunci când apar modificări de aspect în timpul tranzițiilor modului PIP.pentru a intra în modul picture-in-picture, o activitate trebuie să apelezeenterPictureInPictureMode()
., De exemplu, followingcode switch-uri o activitate la modul PIP, atunci când utilizatorul face clic pe un buton dedicat în aplicația UI:
s-ar putea dori să includă logica care trece o activitate în modul PIP, în loc de a merge în thebackground. De exemplu, Google Maps trece la modul PIP dacă utilizatorul apasă butonul home sau recentsbutton în timp ce aplicația navighează., Puteți prinde acest caz prin imperative onUserLeaveHint()
:
Manipularea UI în timpul picture-in-picture
atunci Când activitatea intră sau iese picture-in-picture mode apeluri de sistemActivity.onPictureInPictureModeChanged()
sauFragment.onPictureInPictureModeChanged()
.
ar trebui să suprascrieți aceste apeluri pentru a redesena elementele UI ale activității. Rețineți că modul inPIP activitatea dvs. este afișată într-o fereastră mică. Utilizatorii nu pot interacționa cu elementele UI atunci când modul inPIP și detaliile elementelor UI mici pot fi dificil de văzut. Activități de redare Video cu UI minim oferă cea mai bună experiență de utilizare., Activitatea ar trebui să afișeze doar playbackcontrols video. Elimina alte elemente de UI înainte de activitatea ta intră PIP și a le restaura atunci când youractivity devine din nou pe ecran complet:
Adăugarea de controale
PIP, fereastra de afișare controale atunci când utilizatorul deschide fereastra de meniu (prin atingerea windowon un dispozitiv mobil, sau selectarea meniului de la telecomanda TELEVIZORULUI.dacă o aplicație are o sesiune activemedia, atunci vor apărea comenzile play, pause, next și previous.,
de asemenea, puteți specifica acțiuni particularizate în mod explicit prin construireaPictureInPictureParams
cu PictureInPictureParams.Builder.setActions()
înainte de intrarea în modul PIP, și să treacă params când intra în modul PIP, folosindenterPictureInPictureMode(android.app.PictureInPictureParams)
sausetPictureInPictureParams(android.app.PictureInPictureParams)
.Fii atent. Dacă încercați să adăugați mai mult degetMaxNumPictureInPictureActions()
veți obține doar numărul maxim.când activitatea dvs. trece la PIP, sistemul plasează activitatea în starea dorită și apelează metoda onPause()
a activității., Redarea Video nu trebuie întreruptă și ar trebui să continuejucând dacă activitatea este întreruptă în modul PIP.
În Android 7.0 și mai târziu, ar trebui să-pauză și a relua redarea video atunci când systemcalls activitatea e onStop()
șionStart()
. Făcând acest lucru, puteți avoidhaving pentru a verifica dacă aplicația este în modul PIP, înonPause()
și explicitlycontinuing de redare.,
Dacă aveți pentru a întrerupe redarea în onPause()
punerea în aplicare, pentru a verifica modul PIP de asteptare isInPictureInPictureMode()
și mâner de redare în mod corespunzător, de exemplu:
atunci Când activitatea dvs. comută din modul PIP înapoi la modul ecran complet, thesystem reia activitatea și apeluri taonResume()
metoda.
folosind o singură activitate De redare pentru imagine în imagine
în aplicația dvs., un utilizator poate selecta un videoclip nou atunci când navighează pentru conținut pe ecranul principal, în timp ce o activitate de redare video este în modul PIP., Redați noul videoclip în activitatea De redare existentă în modul ecran complet, în loc de lansarea unei noi activități care ar putea confunda utilizatorul.
Pentru a asigura o activitate unică este folosit pentru redare video cereri andswitched în sau din modul PIP, după cum este necesar, setați activitatea eandroid:launchMode
și singleTask
în manifest:
<activity android:name="VideoActivity" ... android:supportsPictureInPicture="true" android:launchMode="singleTask" ...
În activitate, suprascrie onNewIntent()
și ocupe noul videoclip, oprirea existente videoplayback, dacă este necesar.
cele mai bune practici
PIP ar putea fi dezactivat pe dispozitivele care au memorie RAM scăzută., Înainte ca aplicația dvs. să utilizeze PIP, verificați dacă este disponibilăeste disponibil apelând hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
.PIP este destinat activităților care redă videoclipuri pe ecran complet. Când comutați activitatea dvs. în modul PIP, evitați să afișați nimic, cu excepția conținutului video.Urmăriți când activitatea dvs. intră în modul PIP și ascundeți elementele UI, așa cum este descrisîn manipularea UI în timpul picture-in-picture.deoarece fereastra PIP este afișată ca o fereastră plutitoare în colțul ecranului, ar trebui să evitați afișarea informațiilor critice în ecranul principalîn orice zonă care poate fi ascunsă de fereastra PIP.,
atunci când o activitate este în modul PIP, în mod implicit nu obține focalizarea de intrare. Pentru a primi evenimente de intrare în modul PIP, utilizațiMediaSession.setCallback()
. Pentru mai multe informații cu privire la utilizareasetCallback()
seeDisplayinga carte de joc acum.
atunci Când aplicația este în modul PIP, redare video în fereastra PIP poate causeaudio interferență cu o altă aplicație, cum ar fi un music player app sau voce searchapp. Pentru a evita acest lucru, cererea focus audio atunci când începe redarea video,și să se ocupe de schimbare focus audio notificări, după cum este descris inManaging AudioFocus., Dacă primiți o notificare despre pierderea focalizării audio în modul PIP, întrerupeți sau opriți redarea video.
când aplicația dvs. este pe cale să intre în PIP, rețineți că numai activitatea de sus va intra în imagine în imagine. În unele situații, cum ar fi pe dispozitive cu mai multe ferestre, este posibil ca activitatea de mai jos să fie afișată și să devină vizibilă din nou alături de activitatea PIP. Ar trebui să se ocupe de acest caz, în mod corespunzător, inclusiv activitatea de mai jos obtinerea unui onResume()
sau un onPause()
apel invers. De asemenea, este posibil ca utilizatorul să interacționeze cu activitatea., De exemplu, dacă aveți o activitate Listă video afișată și activitatea Video De redare în modul PIP, utilizatorul ar putea selecta un videoclip nou din listă și activitatea PIP ar trebui să se actualizeze în consecință.
probă Suplimentară de cod
Pentru a descărca o aplicație de probă scrise în Android, seePicture-în-Imagine Eșantion.Pentru a descărca o aplicație de probă scrise în Kotlin, seeAndroid PictureInPicture Eșantion (Kotlin).