Android avuçiçi cihazlar için resim içinde resim (PIP) özelliği, kullanıcıların devam eden bir etkinliği olan 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 işlemleri yapmakta özgürken içerik oynatılmaya devam eder. Kullanıcılar, bu pencerenin konumunu SystemUI aracılığıyla değiştirebilir ve uygulama tarafından sağlanan (üç adede kadar) eylemle şu anda resim içinde resimde bulunan uygulama ile etkileşime girebilir.
PIP, onu destekleyen uygulamalardan açık katılım gerektirir ve etkinlik bazında çalışır. (Tek bir uygulamanın birden fazla etkinliği olabilir, bunlardan yalnızca biri PIP'dedir.) Etkinlikler, enterPictureInPictureMode()
çağırarak resim içinde resim girmeyi ve onPictureInPictureModeChanged()
biçiminde etkinlik geri çağrılarını almayı ister.
setPictureInPictureParams()
yöntemi, etkinliklerin PIP ve özel eylemlerdeyken en boy oranlarını kontrol etmesine olanak tanır ve bu da kullanıcıların etkinliği genişletmek zorunda kalmadan etkinlikle etkileşime girmesine olanak tanır. PIP'de, etkinlik duraklatılmıştır, ancak oluşturma durumundadır ve doğrudan dokunmatik girişi veya pencere odağını almaz. PIP'de aynı anda yalnızca tek bir görev olabilir.
Daha fazla bilgi, Android Developer Picture-in-picture belgelerinde mevcuttur.
Cihaz gereksinimleri
PIP'yi desteklemek için, /android/frameworks/base/core/java/android/content/pm/PackageManager.java
içindeki PackageManager#FEATURE_PICTURE_IN_PICTURE
sistem özelliğini etkinleştirin. PIP'yi destekleyen cihazlar, en küçük genişliğinde 220 dp'den daha büyük bir ekrana sahip olmalıdır. Bölünmüş ekranlı çoklu pencereye benzer şekilde, PIP, ekranda aynı anda birden fazla aktivitenin çalışmasına izin verir. Bu nedenle, cihazların bu kullanım durumunu desteklemek için yeterli CPU ve RAM'e sahip olması gerekir.
uygulama
Aktivite yaşam döngüsü yönetiminin çoğu sistemde ActivityManager
ve WindowManager
arasında yapılır. Referans UI uygulaması SystemUI
paketindedir.
Sistemde yapılan değişiklikler, Uyumluluk Testi Paketi (CTS) testleri tarafından tanımlandığı gibi, içsel davranışını etkilememelidir. PIP iç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ından veya VR sırasında olduğu gibi belirli durumlarda PIP'ye girmesini önlemek içincheckEnterPictureInPictureState()
vakalar ekleyin. -
ActivityManagerService
: PIP girme isteğine yönelik etkinlikten birincil arabirim ve PIP etkinlik durumunu değiştirmek içinWindowManager
veSystemUI
gelen çağrılara yönelik arabirim. -
ActivityStackSupervisor
: Görevleri sabitlenmiş yığının içine veya dışına taşımak içinActivityManagerService
çağrılır,WindowManager
gerektiği gibi güncellenir. -
PinnedStackWindowController
:ActivityManager
WindowManager
arabirimi. -
PinnedStackController
: IME'nin gösterilmesi/gizlenmesi, en boy oranının değiştirilmesi veya eylemlerin değiştirilmesi gibi sistemdeki değişiklikleriSystemUI
bildirir. -
BoundsAnimationController
: yeniden boyutlandırma sırasında bir yapılandırma değişikliğini tetiklemeyecek şekilde PIP etkinlik pencerelerini canlandırır. -
PipSnapAlgorithm
: hem sistemde hem de SystemUI'de kullanılan ve ekranın kenarlarına yakın yerlerde PIP penceresinin yakalama davranışını kontrol eden paylaşılan bir sınıf.
Referans SystemUI
, kullanıcılara özel eylemlerin sunulmasını ve genişletme ve görevden alma gibi genel manipülasyonu destekleyen eksiksiz bir PIP uygulaması sağlar. Cihaz üreticileri, CDD tarafından tanımlanan içsel davranışları etkilemedikleri sürece bu değişiklikler üzerine inşa edebilirler. İşte hızlı bir sınıfa genel bakış:
-
PipManager
: SystemUISystemUI
başlatılanSystemUI
bileşeni. -
PipTouchHandler
: PIP'yi manipüle eden hareketleri kontrol eden dokunmatik işleyici. Bu, yalnızca PIP için giriş tüketicisi etkinken kullanılır (bkz.InputConsumerController
). Buraya yeni hareketler eklenebilir. -
PipMotionHelper
: PIP konumunu ve ekranda izin verilen bölgeyi izleyen bir kolaylık sınıfı. PIP'nin konumunu ve boyutunu güncellemek veya canlandırmak içinActivityManagerService
çağrı yapar. -
PipMenuActivityController
: o anda PIP'de bulunan aktivite tarafından sağlanan eylemleri gösteren bir aktivite başlatır. Bu etkinlik, bir görev kaplama etkinliğidir ve etkileşimli olmasına izin vermek için bindirilen girdi tüketicisini kaldırır. -
PipMenuActivity
: menü etkinliği için uygulama. -
PipMediaController
: medya oturumu PIP'deki varsayılan eylemleri etkileyebilecek şekilde değiştiğindeSystemUI
güncelleyen dinleyici. -
PipNotificationController
: Bir kullanıcı PIP özelliğini kullanırken bir bildirimin aktif olmasını sağlayan kontrolör. -
PipDismissViewController
: PIP ile etkileşime başladıklarında kullanıcılara, reddedilebileceğini belirtmek için gösterilen kaplama.
Varsayılan yerleşim
PIP'nin varsayılan yerleşimini kontrol eden çeşitli sistem kaynakları vardır:
-
config_defaultPictureInPictureGravity
:BOTTOM|RIGHT
gibi, PIP'nin yerleştirileceği köşeyi kontrol eden yerçekimi tamsayı. -
config_defaultPictureInPictureScreenEdgeInsets
: PIP'yi yerleştirmek için ekranın kenarlarından ofsetler. -
config_pictureInPictureDefaultSizePercent
veconfig_pictureInPictureDefaultAspectRatio
: ekran genişliğinin 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ığı gibi@dimen/default_minimal_size_pip_resizable_task
değerinden küçük olmamalıdır. -
config_pictureInPictureSnapMode
: PipSnapAlgorithm'dePipSnapAlgorithm
gibi yakalama davranışı.
Cihaz uygulamaları, CDD ve CTS'de tanımlanan minimum ve maksimum en boy oranlarını değiştirmemelidir.
izinler
AppOpsManager
( master/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üzeyinde kontrol etmelerini sağlar. Bir etkinlik resim içinde resim moduna girmek istediğinde, cihaz uygulamalarının bu kontrole uyması gerekir.
Test yapmak
PIP uygulamalarını test etmek için, /cts/hostsidetests/services/activitymanager
altındaki, özellikle ActivityManagerPinnedStackTests.java
ana bilgisayar tarafındaki CTS testlerinde bulunan resim içinde resimle ilgili tüm testleri çalıştırın.