Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Picture in picture

La funzione Picture-in-Picture (PIP) per i 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é il contenuto continua a essere riprodotto mentre l'utente è libero di eseguire altre azioni. Gli utenti possono manipolare la posizione di questa finestra tramite SystemUI e interagire con l'applicazione attualmente in Picture-in-Picture con (fino a tre) azioni fornite dall'app.

PIP richiede un consenso esplicito da parte delle applicazioni che lo supportano e funziona in base alle attività. (Una singola applicazione può avere più attività, solo una delle quali è in PIP.) Le attività richiedono di entrare in picture-in-picture chiamando enterPictureInPictureMode() e ricevono callback di attività sotto forma di onPictureInPictureModeChanged() .

Il metodo setPictureInPictureParams() consente alle attività di controllare le proporzioni durante il PIP e le azioni personalizzate, che consentono agli utenti di interagire con l'attività senza doverla espandere. In PIP, l'attività è in pausa, ma il rendering, lo stato e non riceve direttamente l'input tattile o lo stato attivo della finestra. In PIP può essere presente una sola attività 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 minima. Simile al multi-finestra a schermo diviso, PIP consente di eseguire più attività sullo schermo contemporaneamente. Pertanto, i dispositivi dovrebbero avere 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 si trova 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 "bloccato". Ecco una rapida panoramica della classe:

  • ActivityRecord : tiene traccia dello stato picture-in-picture di ciascuna 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à dentro o fuori dallo stack bloccato, aggiornando il WindowManager secondo necessità.
  • PinnedStackWindowController : l'interfaccia WindowManager da ActivityManager .
  • PinnedStackController : segnala le modifiche nel sistema a SystemUI , come IME mostrato / nascosto, proporzioni modificate o azioni modificate.
  • BoundsAnimationController : anima le finestre di attività PIP in modo tale da non attivare una modifica della configurazione durante il ridimensionamento.
  • PipSnapAlgorithm : una classe condivisa utilizzata sia nel sistema che nel SystemUI che controlla il comportamento di snap della finestra PIP vicino ai bordi dello schermo.

La 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 influenzino i comportamenti intrinseci definiti dal CDD. Ecco una rapida panoramica della classe:

  • PipManager : il componente SystemUI avviato con SystemUI .
  • PipTouchHandler : il touch handler, che controlla i gesti che manipolano il PIP. Viene utilizzato solo mentre il consumatore 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. Chiama ad 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à di sovrapposizione di attività e rimuove il consumatore di input sovrapposto 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 sta utilizzando la funzione PIP.
  • PipDismissViewController : l'overlay mostrato agli utenti quando iniziano a interagire con il PIP per indicare che può essere ignorato.

Posizionamento predefinito

Sono disponibili 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 della percentuale della larghezza dello schermo e delle 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 CDD.
  • config_pictureInPictureSnapMode : il comportamento di snap definito in PipSnapAlgorithm .

Le implementazioni del dispositivo non devono modificare i rapporti di aspetto minimo e massimo definiti in CDD e CTS.

Autorizzazioni

Il "funzionamento dell'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 tramite le impostazioni di sistema. Le implementazioni del dispositivo devono rispettare questo controllo quando un'attività richiede di entrare in modalità picture-in-picture.

Test

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