Mit Android 14 (API-Level 34) wurden einige Verbesserungen Bild im Bild (BiB) APIs für Multitasking Während BiB in Android 8.0 (API-Level 26) eingeführt, unterstützt auf Android TV. Vor Android wurde auf Google TV noch nichts unterstützt. 13. Beim Multitasking auf dem Fernseher wird im BiB-Modus separate Apps auf dem Bildschirm nebeneinander, wobei eine vollständig ausgeführt wird ein zweites Mal im BiB-Modus. Es gibt unterschiedliche Anforderungen für Apps, die in einem dieser Modi ausgeführt werden.
Das Standardverhalten ist, dass die BiB-App über die Vollbild-App gelegt wird. Dies ist Das funktioniert ähnlich wie das standardmäßige Bild-im-Bild-Verhalten in Android.
Beachte, dass bei der Integration von Multitasking in deiner App seine Nutzungstypen in den Qualitätsrichtlinien für TV-Apps entsprechen.
App im BiB-Modus ausführen
Auf Fernsehern mit Android 14 (API-Level 34) oder höher: App in BiB ausführen
indem Sie enterPictureInPictureMode()
aufrufen. Ältere Fernsehgeräte
wird von Android-Versionen
im BiB-Modus nicht unterstützt.
Hier ist ein Beispiel für die Implementierung der Logik einer Schaltfläche BiB-Modus:
Kotlin
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) pictureInPictureButton.visibility = if (requireActivity().packageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { pictureInPictureButton.setOnClickListener { val aspectRatio = Rational(view.width, view.height) val params = PictureInPictureParams.Builder() .setAspectRatio(aspectRatio) .build() val result = requireActivity().enterPictureInPictureMode(params) } View.VISIBLE } else { View.GONE } }
Java
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (requireActivity().getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { pictureInPictureButton.setVisibility(View.VISIBLE); pictureInPictureButton.setOnClickListener(v -> { Rational aspectRatio = new Rational(view.getWidth(), view.getHeight()); PictureInPictureParams params = new PictureInPictureParams.Builder() .setAspectRatio(aspectRatio) .setTitle("My Streaming App") .setSubtitle("My On-Demand Content") .build(); Boolean result = requireActivity().enterPictureInPictureMode(params); }); } else { pictureInPictureButton.setVisibility(View.GONE); } }
Die Aktion wird nur hinzugefügt, wenn das Gerät die Systemfunktion hat
FEATURE_PICTURE_IN_PICTURE
Wenn die Aktion ausgelöst wird,
Das Seitenverhältnis des BiB-Modus ist auf das Seitenverhältnis des Videos festgelegt, das gerade wiedergegeben wird.
gespielt haben.
Vergessen Sie nicht, einen Titel und einen Untertitel hinzuzufügen, um dem Nutzer Informationen zu liefern. wofür diese BiB im Allgemeinen verwendet wird.
Gleichzeitige Verwendung mit Apps, die im BiB-Modus ausgeführt werden
Wenn Ihre App als Vollbild-App ausgeführt wird, muss sie möglicherweise an andere Apps, die im BiB-Modus ausgeführt werden.
Klare APIs
In einigen Fällen kann die BiB-App wichtige UI-Komponenten innerhalb des Vollbild-App hinzu. Um dies zu verhindern, gibt es klare APIs, die Apps um kritische UI-Komponenten zu identifizieren, die nicht eingeblendet werden sollten. Das System die Anforderungen zu berücksichtigen, um die Abdeckung dieser Komponenten zu vermeiden, Neupositionierung des BiB-Fensters.
Um anzugeben, dass eine Ansicht nicht eingeblendet werden soll, verwenden Sie preferKeepClear
in Ihrem
XML-Layout wie im folgenden Beispiel:
<TextView
android:id="@+id/important_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:preferKeepClear="true"
android:text="@string/app_name"/>
Sie können dies auch programmatisch mithilfe von setPreferKeepClear()
tun:
Kotlin
private lateinit var binding: MyLayoutBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = MyLayoutBinding.inflate(layoutInflater) setContentView(binding.root) binding.importantText.isPreferKeepClear = true }
Java
private MyLayoutBinding binding; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = MyLayoutBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); binding.importantText.setPreferKeepClear(true); }
Es kann vorkommen, dass Sie nicht den gesamten View
leer halten müssen, aber
nur einen Teil davon. Mit der setPreferKeepClearRects()
können Sie Folgendes tun:
Geben Sie Regionen von View
an, die nicht eingeblendet werden sollen. Benutzeroberflächen, die nicht
View
wie Flutter, Jetpack Compose und WebView
für Unterbereiche, die Regionen frei halten müssen. Diese API kann in diesen Fällen verwendet werden.
Nutzungstypen
In Ihrer App muss ein Meta-Datenwertattribut wie folgt deklariert werden:
com.google.android.tv.pip.category
, das dem primären Typ entspricht, oder
Verwendungsmöglichkeiten für den Bild-im-Bild-Modus. Alle <activity>
, die Folgendes festgelegt haben:
android:supportsPictureInPicture="true"
sollte dieses Attribut mit einem
relevanten Wert aus der Tabelle unten.
Nutzungstypen, die in keine dieser Kategorien fallen, insbesondere Wiedergabe von Medieninhalten sind im Bild-im-Bild-Modus auf Fernsehern nicht erlaubt.
Wert | Beschreibung |
---|---|
„communication “ |
Kommunikationsanwendungsfälle wie Video- oder Sprachanrufe |
„smartHome “ |
Smart-Home-Integrationen wie verbundene Türklingeln oder Babyfone |
„health “ |
Gesundheitsbezogene Anwendungsfälle wie Fitness-Tracking oder Gesundheitsüberwachung |
„ticker “ |
Ticker-Anwendungsfälle wie Live-Sportergebnisse oder Nachrichten und Börsenticker. |
Mehrere Werte werden durch einen vertikalen Strich (|
) getrennt. Hier einige Beispiele:
<meta-data android:name="com.google.android.tv.pip.category" android:value="smartHome|health" />