Fotoğraf içinde fotoğraf

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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çin checkEnterPictureInPictureState() vakalar ekleyin.
  • ActivityManagerService : PIP girme isteğine yönelik etkinlikten birincil arabirim ve PIP etkinlik durumunu değiştirmek için WindowManager ve SystemUI gelen çağrılara yönelik arabirim.
  • ActivityStackSupervisor : Görevleri sabitlenmiş yığının içine veya dışına taşımak için ActivityManagerService ç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şiklikleri SystemUI 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 : SystemUI SystemUI başlatılan SystemUI 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çin ActivityManagerService ç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ğinde SystemUI 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 ve config_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'de PipSnapAlgorithm 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.