Android el cihazları için resim içinde resim (PIP) özelliği, kullanıcıların devam eden bir etkinliğe sahip bir uygulamayı küçük bir pencerede yeniden boyutlandırmasına olanak tanır. PIP özellikle video uygulamaları için kullanışlıdır çünkü kullanıcı diğer eylemleri gerçekleştirmekte özgürken içerik oynatılmaya devam eder. Kullanıcılar, SystemUI aracılığıyla bu pencerenin konumunu değiştirebilir ve uygulama tarafından sağlanan (üç adede kadar) eylemle halihazırda resim içinde resim olan uygulamayla etkileşime girebilir.
PIP, onu destekleyen uygulamalardan açıkça katılım gerektirir ve etkinlik bazında çalışır. (Tek bir uygulamanın birden fazla etkinliği olabilir ve bunlardan yalnızca biri PIP'tedir.) Etkinlikler, enterPictureInPictureMode()
öğesini çağırarak resim içinde resim girmeyi ve onPictureInPictureModeChanged()
biçiminde etkinlik geri çağrıları almayı talep eder.
setPictureInPictureParams()
yöntemi, etkinliklerin PIP ve özel eylemlerdeyken en boy oranlarını kontrol etmesine olanak tanır; bu da kullanıcıların, etkinliği genişletmeye gerek kalmadan etkinlikle etkileşime girmesine olanak tanır. PIP'de etkinlik duraklatılmış ancak görüntü oluşturma durumundadır ve doğrudan dokunmatik girdi veya pencere odağı almaz. PIP'te aynı anda yalnızca tek bir görev bulunabilir.
Daha fazla bilgiyi Android Geliştirici Resim içinde Resim belgelerinde bulabilirsiniz.
Cihaz gereksinimleri
PIP'yi desteklemek için, /android/frameworks/base/core/java/android/content/pm/PackageManager.java
dosyasında PackageManager#FEATURE_PICTURE_IN_PICTURE
sistem özelliğini etkinleştirin. PIP'yi destekleyen cihazların en küçük genişliğinde 220dp'den büyük bir ekrana sahip olması gerekir. Bölünmüş ekranlı çoklu pencereye benzer şekilde PIP, birden fazla etkinliğin ekranda aynı anda çalıştırılmasına olanak tanır. Bu nedenle cihazların bu kullanım senaryosunu destekleyecek yeterli CPU ve RAM'e sahip olması gerekir.
Uygulama
Etkinlik yaşam döngüsü yönetiminin çoğu, ActivityManager
ve WindowManager
arasındaki sistemde yapılır. Referans kullanıcı arayüzü uygulaması SystemUI
paketindedir.
Sistemde yapılan değişiklikler, Uyumluluk Test Paketi (CTS) testleri tarafından tanımlanan sistemin kendine özgü davranışını etkilememelidir. PIP'in sistem mantığı temel olarak "sabitlenmiş" yığın içindeki görevlerin ve etkinliklerin yönetimi etrafında döner. İşte hızlı bir sınıfa genel bakış:
-
ActivityRecord
: her etkinliğin resim içinde resim durumunu izler. Kullanıcıların kilit ekranı veya VR gibi belirli durumlarda PIP'e girmesini önlemek içincheckEnterPictureInPictureState()
işlevine vakalar ekleyin. -
ActivityManagerService
: PIP'e girme isteği için etkinlikten gelen birincil arayüz ve PIP etkinlik durumunu değiştirmek içinWindowManager
veSystemUI
gelen çağrılara yönelik arayüz. -
ActivityStackSupervisor
: Görevleri sabitlenmiş yığının içine veya dışına taşımak veWindowManager
gerektiği gibi güncellemek içinActivityManagerService
çağrılır. -
PinnedStackWindowController
:ActivityManager
WindowManager
arayüzü. -
PinnedStackController
: IME'nin gösterilmesi/gizlenmesi, en boy oranının değişmesi veya değişen eylemler gibi sistemdeki değişiklikleriSystemUI
bildirir. -
BoundsAnimationController
: PIP etkinlik pencerelerini, yeniden boyutlandırma sırasında yapılandırma değişikliğini tetiklemeyecek şekilde canlandırır. -
PipSnapAlgorithm
: Hem sistemde hem de SystemUI'de kullanılan ve ekranın kenarlarına yakın PIP penceresinin yapışma davranışını kontrol eden paylaşılan bir sınıf.
Referans SystemUI
kullanıcılara özel eylemler sunmayı ve genişletme ve kapatma gibi genel manipülasyonları destekleyen eksiksiz bir PIP uygulaması sağlar. Cihaz üreticileri, CDD tarafından tanımlanan içsel davranışları etkilemedikleri sürece bu değişikliklerden faydalanabilirler. İşte hızlı bir sınıfa genel bakış:
-
PipManager
:SystemUI
ile başlatılanSystemUI
bileşeni. -
PipTouchHandler
: PIP'i yönlendiren hareketleri kontrol eden dokunma işleyicisi. Bu yalnızca PIP'in giriş tüketicisi aktifken kullanılır (bkz.InputConsumerController
). Buraya yeni hareketler eklenebilir. -
PipMotionHelper
: PIP konumunu ve izin verilen bölgeyi ekranda izleyen bir kolaylık sınıfı. PIP'in konumunu ve boyutunu güncellemek veya canlandırmak içinActivityManagerService
çağrı yapar. -
PipMenuActivityController
: PIP'te mevcut olan aktivite tarafından sağlanan eylemleri gösteren bir aktivite başlatır. Bu etkinlik bir görev katmanlama etkinliğidir ve etkileşimli olmasını sağlamak için kaplama girdi tüketicisini kaldırır. -
PipMenuActivity
: menü etkinliğinin uygulanması. -
PipMediaController
: Medya oturumu PIP'deki varsayılan eylemleri etkileyebilecek şekilde değiştiğindeSystemUI
güncelleyen dinleyici. -
PipNotificationController
: Kullanıcı PIP özelliğini kullanırken bildirimin aktif olmasını sağlayan denetleyici. -
PipDismissViewController
: Kullanıcılara PIP ile etkileşime girmeye başladıklarında bunun kapatılabileceğini belirtmek için gösterilen kaplama.
Varsayılan yerleşim
PIP'in varsayılan yerleşimini kontrol eden çeşitli sistem kaynakları vardır:
-
config_defaultPictureInPictureGravity
:BOTTOM|RIGHT
gibi PIP'in yerleştirileceği köşeyi kontrol eden yer çekimi tamsayısıdır. -
config_defaultPictureInPictureScreenEdgeInsets
: PIP'i yerleştirmek için ekranın kenarlarından uzaklıklar. -
config_pictureInPictureDefaultSizePercent
veconfig_pictureInPictureDefaultAspectRatio
: ekran genişliği yüzdesi ile en boy oranının birleşimi PIP'nin boyutunu kontrol eder. Hesaplanan varsayılan PIP boyutu, CTS ve CDD tarafından tanımlandığı şekliyle@dimen/default_minimal_size_pip_resizable_task
değerinden küçük olmamalıdır. -
config_pictureInPictureSnapMode
:PipSnapAlgorithm
tanımlandığı şekliyle yapışma davranışı.
Cihaz uygulamaları, CDD ve CTS'de tanımlanan minimum ve maksimum en boy oranlarını değiştirmemelidir.
İzinler
AppOpsManager
( main/core/java/android/app/AppOpsManager.java
) paket başına "uygulama işlemi" ( OP_PICTURE_IN_PICTURE
), kullanıcıların sistem ayarları aracılığıyla PIP'yi uygulama başına düzeyde kontrol etmesine olanak tanır. Bir etkinlik resim içinde resim moduna girmeyi talep ettiğinde cihaz uygulamalarının bu denetime uyması gerekir.
Test yapmak
PIP uygulamalarını test etmek için, /cts/hostsidetests/services/activitymanager
altında, özellikle ActivityManagerPinnedStackTests.java
altında ana bilgisayar tarafı CTS testlerinde bulunan resim içinde resim ile ilgili tüm testleri çalıştırın.