Android 14 (API düzeyi 34), Pencere içinde pencere (PiP) API'leri sayesinde çoklu görev özelliğinden yararlanabilirsiniz. PIP 8.0 (API düzeyi 26) sürümünde destek kullanıma sunulduktan sonra yaygın olarak Android TV'de desteklenir ve Android öncesinde Google TV'de hiç desteklenmemektedir. 13. TV'de çoklu görev özelliği, PiP modunu kullanarak iki Ekranda bir arada bulunacak ayrı uygulamalar: tam olarak çalışan ve ikincisi PiP modunda çalışıyor. Her biri 100'den az gösterim alan uygulamalar için farklı gereksinimler vardır.
Varsayılan davranış, PiP uygulamasının tam ekran uygulamanın üzerine yerleştirilmesidir. Bu Standart Android pencere içinde pencere davranışıyla hemen hemen aynıdır.
Çoklu görev entegrasyonu sırasında uygulamanızın, kullanım türlerini TV uygulaması kalite yönergelerine uyun.
Uygulamanızı PiP modunda çalıştırma
Android 14 (API düzeyi 34) veya sonraki sürümleri çalıştıran TV cihazlarında uygulamanızı PiP'de çalıştırın
moduna geçmek için enterPictureInPictureMode()
numaralı telefonu arayın. Daha erken çalışan TV cihazları
Android sürümleri PiP modunu desteklemiyor.
Burada, giriş yapmak için bir düğmenin mantığının nasıl uygulanacağına PiP modu:
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); } }
İşlem yalnızca cihazda sistem özelliği varsa eklenir
FEATURE_PICTURE_IN_PICTURE
. Ayrıca, işlem tetiklendiğinde
PiP modunun en boy oranı, gösterilen videonun en boy oranıyla eşleşecek şekilde ayarlandı
oynandı.
Kullanıcıya bilgilerini vermek için bir başlık ve altyazı eklediğinizden emin olun kullanım amacına değineceğiz.
PiP modunda çalışan uygulamalarla birlikte kullanılabilir
Uygulamanız tam ekran uygulama olarak çalışırken diğer PiP modunda çalışan uygulamalar.
Net API'ler
Bazı durumlarda PiP uygulaması, tam ekran uygulama. Bu sorunu azaltmak için uygulamaların, gibi önemli kullanıcı arayüzü bileşenlerini tanımlamak için kullanılır. Sistem bu bileşenleri ele almamak için yapılan talepleri dikkate almaya PiP penceresini yeniden konumlandırıyoruz.
Bir görünümün yer paylaşımlı olmaması gerektiğini belirtmek içinpreferKeepClear
XML düzeni:
<TextView
android:id="@+id/important_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:preferKeepClear="true"
android:text="@string/app_name"/>
Bu işlemi setPreferKeepClear()
kullanarak programatik olarak da yapabilirsiniz:
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); }
Bütün bir View
öğesini net tutmanız gerekmeyen zamanlar olabilir, ancak
yalnızca bir kısmını oluşturuyor. setPreferKeepClearRects()
, şu amaçlarla kullanılabilir:
View
bölgesinin üzerine yerleştirilmemesi gereken bölgelerini belirtin. Kullanılmayan kullanıcı arayüzleri
View
'lar (Flutter, Jetpack Compose ve WebView gibi) yerel olarak
alt bölümlerin net bir şekilde belirtilmesini sağlar. Bu API bu tür durumlarda kullanılabilir.
Kullanım türleri
Uygulamanız şunun meta veri değeri özelliğini beyan etmelidir:
Birincil türe karşılık gelen com.google.android.tv.pip.category
veya
pencere içinde pencere modunun kullanım türleri hakkında bilgi edinin. Ayarlanan tüm <activity>
android:supportsPictureInPicture="true"
bu özelliği bir
alakalı değere bakın.
Bu kategorilerin hiçbirine uymayan kullanım türleri, özellikle medya içeriklerinin oynatılmasına, TV'de pencere içinde pencere modunda izin verilmez.
Değer | Açıklama |
---|---|
"communication " |
İletişimle ilgili kullanım alanları (ör. görüntülü veya sesli aramalar). |
"smartHome " |
Bağlı kapı zilleri veya bebek monitörü gibi akıllı ev entegrasyonları. |
"health " |
Fitness takibi veya sağlık takibi gibi sağlıkla ilgili kullanım alanları. |
"ticker " |
Hisse senedi kullanım alanları (ör. canlı spor karşılaşmalarının skorları veya haberler ve hisse senedi sembolleri). |
Birden fazla değer bir dikey çubukla (|
) ayrılır. Örnek:
<meta-data android:name="com.google.android.tv.pip.category" android:value="smartHome|health" />