Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Picture-in-picture

La funzione Picture-in-Picture (PIP) per dispositivi portatili Android consente agli utenti di ridimensionare un'app con un'attività in corso in una piccola finestra. PIP è particolarmente utile per le app video perché i contenuti continuano a essere riprodotti mentre l'utente è libero di eseguire altre azioni. Gli utenti possono manipolare la posizione di questa finestra tramite l'interfaccia utente di sistema e interagire con l'applicazione attualmente in figura nell'immagine con (fino a tre) azioni fornite dall'app.

PIP richiede esplicito opt-in dalle applicazioni che lo supportano e funziona in base all'attività. (Una singola applicazione può avere più attività, solo una delle quali è in PIP.) Le attività richiedono di immettere l'immagine nell'immagine chiamando enterPictureInPictureMode() e di ricevere richiamate di attività sotto forma di onPictureInPictureModeChanged() .

Il metodo setPictureInPictureParams() consente alle attività di controllare le proporzioni mentre si setPictureInPictureParams() in PIP e azioni personalizzate, che consentono agli utenti di interagire con l'attività senza espanderla. In PIP, l'attività è in pausa, ma con rendering, stato e non riceve direttamente l'input touch o lo stato attivo della finestra. Solo una singola attività può essere in PIP alla volta.

Ulteriori informazioni sono disponibili nella documentazione Picture-in-picture per sviluppatori Android.

Requisiti del dispositivo

Per supportare PIP, abilitare la funzione di sistema /android/frameworks/base/core/java/android/content/pm/PackageManager.java PackageManager#FEATURE_PICTURE_IN_PICTURE in /android/frameworks/base/core/java/android/content/pm/PackageManager.java . I dispositivi che supportano PIP devono avere uno schermo più grande di 220dp alla sua larghezza più piccola. Simile alla multi-finestra a schermo diviso, PIP consente di eseguire più attività contemporaneamente sullo schermo. Pertanto, i dispositivi dovrebbero disporre di CPU e RAM sufficienti per supportare questo caso d'uso.

Implementazione

La maggior parte della gestione del ciclo di vita delle attività viene eseguita nel sistema tra ActivityManager e WindowManager . L'implementazione dell'interfaccia utente di riferimento è nel pacchetto SystemUI .

Le modifiche al sistema non dovrebbero influire sul suo comportamento intrinseco come definito dai test CTS (Compatibility Test Suite) . La logica di sistema per PIP ruota principalmente attorno alla gestione di compiti e attività all'interno dello stack "appuntato". Ecco una rapida panoramica della classe:

  • ActivityRecord : tiene traccia dello stato picture-in-picture di ogni attività. Per impedire agli utenti di accedere a PIP in determinate circostanze, ad esempio dalla schermata di blocco o durante la checkEnterPictureInPictureState() virtuale, aggiungere casi a checkEnterPictureInPictureState() .
  • ActivityManagerService : l'interfaccia principale dell'attività per richiedere l'immissione di PIP e l'interfaccia per le chiamate da WindowManager e SystemUI per modificare lo stato dell'attività PIP.
  • ActivityStackSupervisor : chiamato da ActivityManagerService per spostare le attività all'interno o all'esterno dello stack bloccato, aggiornando WindowManager se necessario.
  • PinnedStackWindowController : l'interfaccia WindowManager di ActivityManager .
  • PinnedStackController : riporta le modifiche nel sistema a SystemUI , come IME mostrato / nascosto, le proporzioni modificate o le azioni modificate.
  • BoundsAnimationController : anima le finestre di attività PIP in modo da non attivare una modifica della configurazione durante il ridimensionamento.
  • PipSnapAlgorithm : una classe condivisa utilizzata sia nel sistema che in SystemUI che controlla il comportamento di aggancio della finestra PIP vicino ai bordi dello schermo.

Il SystemUI riferimento fornisce un'implementazione completa di PIP che supporta la presentazione di azioni personalizzate agli utenti e la manipolazione generale, come l'espansione e il licenziamento. I produttori di dispositivi possono basarsi su questi cambiamenti, purché non incidano sui comportamenti intrinseci definiti dal CDD. Ecco una rapida panoramica della classe:

  • PipManager : il componente SystemUI avviato con SystemUI .
  • PipTouchHandler : il gestore del tocco, che controlla i gesti che manipolano il PIP. Questo viene utilizzato solo mentre l'utente di input per il PIP è attivo (vedere InputConsumerController ). Nuovi gesti possono essere aggiunti qui.
  • PipMotionHelper : una classe di convenienza che tiene traccia della posizione PIP e della regione consentita sullo schermo. Chiamate a ActivityManagerService per aggiornare o animare la posizione e le dimensioni del PIP.
  • PipMenuActivityController : avvia un'attività che mostra le azioni fornite dall'attività attualmente in PIP. Questa attività è un'attività sovrapposizione di attività e rimuove il consumatore di input di sovrapposizione per consentirne l'interattività.
  • PipMenuActivity : l'implementazione per l'attività di menu.
  • PipMediaController : il listener che aggiorna SystemUI quando la sessione multimediale cambia in un modo che potrebbe influenzare le azioni predefinite sul PIP.
  • PipNotificationController : il controller che garantisce che una notifica sia attiva mentre un utente utilizza la funzione PIP.
  • PipDismissViewController : l'overlay mostrato agli utenti quando iniziano a interagire con il PIP per indicare che può essere eliminato.

Posizionamento predefinito

Esistono varie risorse di sistema che controllano il posizionamento predefinito del PIP:

  • config_defaultPictureInPictureGravity : il numero intero di gravità , che controlla l'angolo per posizionare il PIP, ad esempio BOTTOM|RIGHT .
  • config_defaultPictureInPictureScreenEdgeInsets : gli offset dai lati dello schermo per posizionare il PIP.
  • config_pictureInPictureDefaultSizePercent e config_pictureInPictureDefaultAspectRatio : la combinazione di percentuale della larghezza dello schermo e le proporzioni controlla la dimensione del PIP. La dimensione PIP predefinita calcolata non deve essere inferiore a @dimen/default_minimal_size_pip_resizable_task , come definito da CTS e dal CDD.
  • config_pictureInPictureSnapMode : il comportamento di snap come definito in PipSnapAlgorithm .

Le implementazioni dei dispositivi non devono modificare le proporzioni minime e massime definite nel CDD e nel CTS.

permessi

L '"operazione applicazione" per pacchetto ( OP_PICTURE_IN_PICTURE ) in AppOpsManager ( master/core/java/android/app/AppOpsManager.java ), consente agli utenti di controllare il PIP a livello di applicazione attraverso le impostazioni di sistema. Le implementazioni dei dispositivi devono rispettare questo controllo quando un'attività richiede di accedere alla modalità immagine nell'immagine.

analisi

Per testare le implementazioni PIP, eseguire tutti i test relativi all'immagine trovati nei test CTS lato host in /cts/hostsidetests/services/activitymanager , in particolare in ActivityManagerPinnedStackTests.java .