Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Bild im Bild

Mit der PIP-Funktion (Picture-in-Picture) für Android-Handheld-Geräte können Benutzer die Größe einer App mit fortlaufender Aktivität in einem kleinen Fenster ändern. PIP ist besonders nützlich für Video-Apps, da Inhalte weiterhin abgespielt werden, während der Benutzer andere Aktionen ausführen kann. Benutzer können die Position dieses Fensters über die SystemUI bearbeiten und mit der Anwendung, die sich derzeit in Bild-in-Bild befindet, mit (bis zu drei) von der App bereitgestellten Aktionen interagieren.

PIP erfordert eine explizite Anmeldung von Anwendungen, die es unterstützen, und arbeitet pro Aktivität. (Eine einzelne Anwendung kann mehrere Aktivitäten haben, von denen sich nur eine in PIP befindet.) Aktivitäten fordern die Eingabe von Bild-in-Bild durch Aufrufen von enterPictureInPictureMode() an und erhalten Aktivitätsrückrufe in Form von onPictureInPictureModeChanged() .

Mit der Methode setPictureInPictureParams() können Aktivitäten ihr Seitenverhältnis in PIP- und benutzerdefinierten Aktionen steuern, setPictureInPictureParams() Benutzer mit der Aktivität interagieren können, ohne sie erweitern zu müssen. In PIP befindet sich die Aktivität in einem angehaltenen, aber gerenderten Status und erhält keine direkte Berührungseingabe oder Fensterfokus. Es kann immer nur eine Aufgabe in PIP sein.

Weitere Informationen finden Sie in der Picture-in-Picture- Dokumentation für Android Developer.

Geräteanforderungen

Aktivieren Sie zur Unterstützung von PIP die PackageManager#FEATURE_PICTURE_IN_PICTURE in /android/frameworks/base/core/java/android/content/pm/PackageManager.java . Geräte, die PIP unterstützen, müssen einen Bildschirm haben, der bei seiner kleinsten Breite größer als 220 dp ist. Ähnlich wie bei mehreren Fenstern mit geteiltem Bildschirm können mit PIP mehrere Aktivitäten gleichzeitig auf dem Bildschirm ausgeführt werden. Daher sollten Geräte über ausreichend CPU und RAM verfügen, um diesen Anwendungsfall zu unterstützen.

Implementierung

Der größte Teil des Aktivitätslebenszyklusmanagements erfolgt im System zwischen ActivityManager und WindowManager . Die Referenz-UI-Implementierung befindet sich im SystemUI Paket.

Änderungen am System sollten sich nicht auf das in den CTS-Tests (Compatibility Test Suite) definierte Verhalten auswirken. Die Systemlogik für PIP dreht sich hauptsächlich um die Verwaltung von Aufgaben und Aktivitäten innerhalb des "angehefteten" Stapels. Hier ist eine kurze Klassenübersicht:

  • ActivityRecord : Verfolgt den Bild-in-Bild-Status jeder Aktivität. checkEnterPictureInPictureState() Fälle hinzu, um zu verhindern, dass Benutzer unter bestimmten Umständen PIP checkEnterPictureInPictureState() , z. B. über den Sperrbildschirm oder während der VR.
  • ActivityManagerService : Die primäre Schnittstelle von der Aktivität zur Anforderung der Eingabe von PIP und die Schnittstelle zu Aufrufen von WindowManager und SystemUI zum Ändern des PIP-Aktivitätsstatus.
  • ActivityStackSupervisor : von der gerufenen ActivityManagerService Aufgaben in den oder aus dem fixierten Stapel zu bewegen, die Aktualisierung WindowManager wie nötig.
  • PinnedStackWindowController : Die WindowManager Schnittstelle von ActivityManager .
  • PinnedStackController : PinnedStackController Änderungen im System an SystemUI , z. B. IME angezeigt / ausgeblendet, Seitenverhältnis geändert oder Aktionen geändert.
  • BoundsAnimationController : BoundsAnimationController die PIP-Aktivitätsfenster so, dass beim BoundsAnimationController der BoundsAnimationController keine Konfigurationsänderung ausgelöst wird.
  • PipSnapAlgorithm : Eine gemeinsam genutzte Klasse, die sowohl im System als auch in der SystemUI verwendet wird und das Fangverhalten des PIP-Fensters in der Nähe der Bildschirmränder steuert.

Die Referenz SystemUI bietet eine vollständige Implementierung von PIP, die das Präsentieren benutzerdefinierter Aktionen für Benutzer und allgemeine Manipulationen wie Erweiterung und Entlassung unterstützt. Gerätehersteller können auf diesen Änderungen aufbauen, sofern sie das von der CDD definierte Verhalten nicht beeinflussen. Hier ist eine kurze Klassenübersicht:

  • PipManager : Die SystemUI Komponente, die mit SystemUI gestartet SystemUI .
  • PipTouchHandler : Der Touch-Handler, der die Gesten steuert, die den PIP manipulieren. Dies wird nur verwendet, wenn der Eingangskonsument für den PIP aktiv ist (siehe InputConsumerController ). Hier können neue Gesten hinzugefügt werden.
  • PipMotionHelper : Eine PipMotionHelper , die die PIP-Position und den zulässigen Bereich auf dem Bildschirm verfolgt. Ruft ActivityManagerService auf, um die Position und Größe des PIP zu aktualisieren oder zu animieren.
  • PipMenuActivityController : PipMenuActivityController eine Aktivität, die die Aktionen anzeigt, die von der Aktivität bereitgestellt werden, die sich derzeit in PIP befindet. Diese Aktivität ist eine Task-Overlay-Aktivität und entfernt den überlagerten Eingabekonsumenten, damit er interaktiv sein kann.
  • PipMenuActivity : Die Implementierung für die PipMenuActivity .
  • PipMediaController : Der Listener, der die SystemUI aktualisiert, wenn sich die Mediensitzung so ändert, dass die Standardaktionen auf dem PIP beeinflusst werden.
  • PipNotificationController : Der Controller, der sicherstellt, dass eine Benachrichtigung aktiv ist, während ein Benutzer die PIP-Funktion verwendet.
  • PipDismissViewController : Das Overlay, das Benutzern angezeigt wird, wenn sie mit dem PIP interagieren, um anzuzeigen, dass es geschlossen werden kann.

Standardplatzierung

Es gibt verschiedene Systemressourcen, die die Standardplatzierung des PIP steuern:

  • config_defaultPictureInPictureGravity : Die Schwerkraft- Ganzzahl, die die Ecke zum Platzieren des PIP steuert, z. B. BOTTOM|RIGHT .
  • config_defaultPictureInPictureScreenEdgeInsets : Die Offsets von den Seiten des Bildschirms zum Platzieren des PIP.
  • config_pictureInPictureDefaultSizePercent und config_pictureInPictureDefaultAspectRatio : Die Kombination aus Prozentsatz der Bildschirmbreite und Seitenverhältnis steuert die Größe des PIP. Die berechnete Standard-PIP-Größe sollte nicht kleiner als @dimen/default_minimal_size_pip_resizable_task , wie von CTS und der CDD definiert.
  • config_pictureInPictureSnapMode : Das in PipSnapAlgorithm definierte PipSnapAlgorithm .

Geräteimplementierungen sollten die in CDD und CTS definierten minimalen und maximalen Seitenverhältnisse nicht ändern.

Berechtigungen

Mit der "Anwendungsoperation" pro Paket ( OP_PICTURE_IN_PICTURE ) in AppOpsManager ( master/core/java/android/app/AppOpsManager.java ) können Benutzer PIP auf Anwendungsebene über die Systemeinstellungen steuern. Geräteimplementierungen müssen diese Prüfung berücksichtigen, wenn eine Aktivität den Bild-in-Bild-Modus aufruft.

Testen

Führen Sie zum Testen von PIP-Implementierungen alle Bild-in-Bild-Tests aus, die in den host-seitigen CTS-Tests unter /cts/hostsidetests/services/activitymanager , insbesondere in ActivityManagerPinnedStackTests.java .