TV kumandalarını yönetme

TV cihazları, uygulamalarla etkileşim kurmak için temel bir uzaktan kumanda, işaretçi kumandası veya oyun kumandası gibi ikincil bir donanım cihazı gerektirir. Uygulamanız, tutarlı bir kullanıcı deneyimi sunmak için yön tuş takımı (D-pad) girişini desteklemeli, kumandaların çevrimdışı olma durumunu yönetmeli ve işaretçi uzaktan kumandalar da dahil olmak üzere birden fazla kumanda türünden girişi desteklemelidir.

D-pad minimum kontrolleri

TV cihazları için varsayılan kumanda, d-pad'dir. Genel olarak uygulamanız yalnızca yukarı, aşağı, sol, sağ, seç, Geri ve Ana Sayfa düğmeleri olan bir uzaktan kumandayla çalıştırılabilmelidir. Uygulamanız genellikle ek kontroller içeren bir oyun kumandası gerektiren bir oyunsa yalnızca bu d-pad kontrolleriyle oyun oynamayı desteklemeye çalışın. Aksi takdirde, kullanıcıyı bir kumanda gerektiği konusunda uyarın ve d-pad kumandayı kullanarak oyununuzdan sorunsuz bir şekilde çıkmasına izin verin.

TV cihazları için d-pad kumandalarıyla gezinme hakkında daha fazla bilgi edinmek isterseniz TV'de gezinme başlıklı makaleyi inceleyin.

Kumanda bağlantısının kesilmesini yönetme

TV kumandaları genellikle Bluetooth cihazlardır. Bu cihazlar, düzenli olarak uyku moduna geçip TV cihazıyla bağlantıyı keserek güç tasarrufu yapmaya çalışabilir. Bu nedenle, yeniden bağlanma etkinliklerini işleyecek şekilde yapılandırılmamış uygulamalar kesintiye uğrayabilir veya yeniden başlatılabilir. Bu olaylar aşağıdaki durumlardan herhangi birinde gerçekleşebilir:

  • Birkaç dakika uzunluğundaki bir video oynatılırken d-pad veya oyun kumandası uyku moduna geçebilir, TV cihazıyla bağlantısı kesilebilir ve daha sonra yeniden bağlanabilir.
  • Oyun sırasında yeni bir oyuncu, bağlı olmayan bir oyun kumandası kullanarak oyuna katılabilir.
  • Oyun sırasında oyuncu oyundan çıkabilir ve oyun kumandasının bağlantısını kesebilir.

Bağlantı kesme ve yeniden bağlanma etkinliklerine tabi olan tüm TV uygulaması etkinlikleri, uygulama manifestinde yeniden bağlanma etkinliklerini işleyecek şekilde yapılandırılmalıdır. Aşağıdaki kod örneğinde, klavye veya gezinme cihazının bağlanması, bağlantısının kesilmesi ya da yeniden bağlanması gibi yapılandırma değişikliklerini işlemek için bir etkinliğin nasıl etkinleştirileceği gösterilmektedir:

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

Bu yapılandırma değişikliği, uygulamanın Android çerçevesi tarafından yeniden başlatılmak yerine yeniden bağlanma etkinliği aracılığıyla çalışmaya devam etmesini sağlar. Bu da iyi bir kullanıcı deneyimi sunar.

D-pad giriş varyasyonlarını işleme

TV cihazı kullanıcılarının TV'leriyle kullandıkları birden fazla kumanda türü olabilir. Örneğin, bir kullanıcının temel bir d-pad kumandası, işaretçi uzaktan kumandası veya oyun kumandası olabilir. Bir oyun kumandası, D-pad işlevleri için kullanıldığında temel bir D-pad'in gönderdiği tuş kodlarından farklı tuş kodları sağlayabilir.

Kullanıcının uygulamanızı kullanmak için kumandalar arasında geçiş yapması gerekmemesi için d-pad girişindeki varyasyonları işleyin. Giriş varyasyonlarını işleme hakkında daha fazla bilgi için Yön tuşu girişini işleme başlıklı makaleyi inceleyin.

İşaretçi uzaktan kumandalarını destekleme

Bazı TV cihazları, hava fareleri veya dokunmaya duyarlı yön tuşları (dokunmatik yüzeyler) olan uzaktan kumandalar gibi işaretçi uzaktan kumandaları destekler. İşaretçi uzaktan kumandaları desteklendiğinde kullanıcılar uygulamanızla işaretleyip tıklama, fareyle üzerine gelme, kaydırma ve sürükleme hareketlerini kullanarak etkileşim kurabilir. Bu sayede, tam D-pad uyumluluğu korunurken uyumlu donanımlarda daha akıcı bir deneyim sunulur.

Manifest'te işaretçi uzaktan desteğini bildirme

Uygulamanızda işaretçi ve dokunmatik girişle gezinilebileceğini belirtmek için uygulama manifestinizi <application> öğesinin içinde (veya her etkinlik için desteği yapılandırmak üzere ayrı <activity> öğelerinin içinde) true olarak ayarlanmış android.software.leanback.supports_touch <property> ile yapılandırın:

<manifest ...>
    <!-- Signal whether the app is adaptive or built just for TV -->
    <uses-feature
        android:name="android.software.leanback"
        android:required="true|false" />
    <!-- Ensure the app can be installed on conventional TVs -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
    <application ...>
        <!-- Signal whether the app supports pointer remotes -->
        <property
            android:name="android.software.leanback.supports_touch"
            android:value="true" />
        ...
    </application>
</manifest>

Tıklama, fareyle üzerine gelme ve kaydırma etkileşimlerini destekler.

İşaretçi uzaktan kumandaları desteklerken kullanıcı arayüzü bileşenlerinizin aşağıdaki etkileşimlerde imleç ve dokunmatik girişe uygun şekilde yanıt verdiğinden emin olun:

  • Tıklama ve seçim: Odaklanabilir ve seçilebilir tüm kullanıcı arayüzü öğeleri, işaretçi uzaktan kumandasıyla tıklanabilir olmalı ve d-pad seçiminin (KEYCODE_DPAD_CENTER) davranışıyla eşleşmelidir.
    • Jetpack Compose: Modifier.clickable() veya pointerInput değiştiricilerini kullanın. Daha fazla bilgi için Dokunma ve basma bölümüne bakın.
    • Görünümler: Görünümlerdeki tıklama etkinliklerini işleyin. Daha fazla bilgi için Giriş etkinliklerine genel bakış başlıklı makaleyi inceleyin.
  • Görsel fareyle üzerine gelme durumları: İşaretçi imlecinin seçilebilir bir öğenin üzerine geldiğini belirtmek için net bir görsel fareyle üzerine gelme efekti sağlayın.
    • Jetpack Compose: Modifier.hoverable() kullanın veya InteractionSource kullanarak fareyle üzerine gelme durumlarını gözlemleyin. Daha fazla bilgi için Kullanıcı etkileşimlerini yönetme başlıklı makaleyi inceleyin.
    • Görünümler: android:state_hovered="true" ile durum listesi çizilebilir öğelerini kullanarak fareyle üzerine gelme durumlarını tanımlayın.
  • Kaydırma ve hızlı kaydırma: Dokunmaya duyarlı orta D-pad düğmesinde kaydırma veya hızlı kaydırma hareketiyle tetiklenen yatay ve dikey kaydırma, tüm kaydırılabilir içeriklerde sorunsuz çalışmalıdır.
  • Sürükleyerek kaydırma: Kullanıcılar, kaydırılabilir kapsayıcılar üzerinde dikey (yukarı ve aşağı) veya yatay (sola ve sağa) kaydırma yapmak için sürükleyebilmelidir.
    • Jetpack Compose: Standart kaydırılabilir kapsayıcılar, varsayılan olarak işaretçi ve dokunarak kaydırmayı destekler. Özel uygulamalar için Compose'da işaretçi girişi başlıklı makaleyi inceleyin.
    • Görünümler: Standart kaydırılabilir görünümler, varsayılan olarak dokunarak kaydırmayı destekler. Özel giriş işleme için Dokunma ve giriş bölümüne bakın.
  • Medya oynatma kaydırma: Medya oynatma sırasında (ör. TV programları ve filmler) kullanıcılar, oynatma ilerleme çubuğuyla (arama çubuğu) etkileşim kurabilmelidir. Kullanıcılar, geçmiş veya gelecekteki bir zaman damgasına atlamak için işaretleyip tıklayabilmeli ve belirli bir zamana gitmek için ilerleme çubuğu boyunca sürükleyebilmelidir (kaydırabilmelidir).

Düğme etkinliklerini yönetme

Kullanıcı bir kumandadaki düğmeyi tıkladığında uygulamanız KeyEvent içeren bir etkinlik alır. Düğmenin amaçlanan davranışı, oynatma, duraklatma veya durdurma gibi bir medya etkinliği ya da seçim veya gezinme gibi TV türü bir etkinlik olabilir. İyi bir kullanıcı deneyimi sunmak için kumanda düğmelerine tutarlı davranışlar atayın.

TV kullanıcı arayüzü etkinlikleri

Aşağıdaki tabloda gösterildiği gibi, KeyEvent türlerini oluşturan düğmelere TV kullanıcı arayüzü davranışını atayın:

KeyEvent Davranış
KEYCODE_BUTTON_B, KEYCODE_BACK Geri
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER Seçim
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT Gezinme

Medya etkinlikleri

Kullanıcı medya izlerken aşağıdaki tabloda gösterildiği gibi KeyEvent türlerini oluşturan düğmelere davranış atayın. Uygulamanız bir MediaSession kontrol ediyorsa tabloda gösterilen MediaControllerCompat.TransportControls yöntemlerinden birini çağırmak için MediaControllerAdapter kullanın. Seçim düğmelerinin bu bağlamda Oynat veya Duraklat düğmeleri olarak işlev gördüğünü unutmayın.

KeyEvent TransportControls çağrısı Davranış
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play() Oynat
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER pause() Duraklat
BUTTON_R1 skipToNext() Sonrakine atla
BUTTON_L1 skipToPrevious() Öncekine atla
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLE fastForward() İleri sar
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKE rewind() Geri sar
Yok stop() Durdur

Geri düğmesinin uygun şekilde davranmasını sağlama

Geri düğmesi hiçbir zaman açma/kapatma düğmesi olarak kullanılmamalıdır. Örneğin, bir menüyü hem açmak hem de kapatmak için kullanmayın. Bu düğmeyi yalnızca oyuncunun daha önce bulunduğu ekranlarda geriye doğru gezinmek için kullanın.

Geri düğmesi yalnızca doğrusal, geriye doğru gezinme gerçekleştirdiğinden, farklı bir düğmeyle açılan uygulama içi menüden çıkıp uygulamaya dönmek için bu düğmeyi kullanabilirsiniz. Geri düğmesine art arda basıldığında her zaman Android TV ana ekranına dönülmelidir. Örneğin: oyun oynama > oyunu duraklatma ekranı > oyun ana ekranı > Android TV ana ekranı veya TV programı oynatma > TV uygulaması ana ekranı

Android TV ana ekranı.

Gezinme tasarımı hakkında daha fazla bilgi için Geri ve Yukarı gezinme tasarımı başlıklı makaleyi inceleyin. Uygulama hakkında bilgi edinmek için Doğru geri gezinme sağlama başlıklı makaleyi inceleyin.

Oyunlar için kumandaları kullanma

Android TV için oyun geliştirirken kontrol şemanızı hem standart TV uzaktan kumandaları hem de özel oyun kumandalarıyla çalışacak şekilde tasarlayın.

D-pad kontrollerini destekleme

Android TV cihazları için varsayılan kontrol grubu olduğundan kontrol şemanızı bir D-pad kontrolü etrafında planlayın. Oyuncunun, oyunun tüm yönleri için d-pad kullanabilmesi gerekir. Bu, yalnızca temel oynanabilirliği kontrol etmek için değil, menülerde ve reklamlarda gezinmek için de geçerlidir. Bu nedenle, Android TV oyununuzda "Devam etmek için buraya dokunun" gibi ifadelerle dokunma arayüzüne atıfta bulunulmadığından emin olun.

Oyuncunun kumandayla etkileşimini şekillendirme şekliniz, mükemmel bir kullanıcı deneyimi elde etmenin anahtarı olabilir. Aşağıdaki en iyi uygulamalardan yararlanabilirsiniz:

  • Kumanda gereksinimlerini önceden bildirin: Kumandalarla ilgili beklentileri oyuncuya bildirmek için Google Play açıklamanızı kullanın. Bir oyun, yalnızca D-pad'i olan bir oyun kumandası yerine joystick'i olan bir oyun kumandasına daha uygunsa bunu açıkça belirtin. Bir oyunda uygun olmayan bir kumanda kullanan oyuncu kötü bir deneyim yaşayabilir ve oyununuza düşük puan verebilir.
  • Tutarlı düğme eşleme kullanın: Sezgisel düğme eşleme, iyi bir kullanıcı deneyimi için çok önemlidir. Örneğin, kabul etmek için A düğmesini ve iptal etmek için B düğmesini kullanarak kabul edilen geleneklere uyun. Ayrıca, kullanıcının düğmeleri yeniden eşlemesine izin vererek esneklik de sağlayabilirsiniz. Düğme eşleme hakkında daha fazla bilgi için Kumanda işlemlerini yönetme başlıklı makaleyi inceleyin.
  • Kumanda özelliklerini algılama ve buna göre ayarlama: Kumanda ile oyun arasındaki eşleşmeyi optimize etmek için kumandanın özelliklerini sorgulayın. Örneğin, oyuncunun kumandayı havada sallayarak bir nesneyi yönlendirmesini isteyebilirsiniz ancak oyuncunun kumandasında ivme ölçer ve jiroskop donanımı yoksa sallama işlemi işe yaramaz. Kumandayı sorgulayın ve hareket algılama desteklenmiyorsa alternatif bir kontrol şemasına geçin. Kumanda özelliklerini sorgulama hakkında daha fazla bilgi için Android sürümlerinde kumandaları destekleme başlıklı makaleyi inceleyin.

Uygun düğmeleri kullanma

Tüm oyun kumandalarında Başlat, Ara veya Menü düğmeleri bulunmaz. Kullanıcı arayüzünüzün bu düğmelerin kullanımına bağlı olmadığından emin olun.

Birden fazla kumandayı yönetme

Birden fazla oyuncu kendi kumandasıyla oyun oynarken her oyuncu-kumanda çiftini eşlemek önemlidir. Denetleyici numarası tanımlamanın nasıl uygulanacağı hakkında bilgi için getControllerNumber() başlıklı makaleyi inceleyin.

Kumanda bağlantısının kesilmesini yönetme

Oyun sırasında bir kumandanın bağlantısı kesildiğinde oyunu duraklatın ve bağlantısı kesilen oyuncudan kumandasını yeniden bağlamasını isteyen bir iletişim kutusu gösterin.

Ayrıca, iletişim kutusunda sorun giderme ipuçları sunun. Örneğin, oyuncuya "Bluetooth bağlantınızı kontrol edin" diyebilirsiniz. Giriş cihazı desteğini uygulama hakkında daha fazla bilgi için Kumanda işlemlerini işleme ve Bluetooth'a genel bakış başlıklı makaleleri inceleyin.

Kumanda talimatlarını göster

Oyununuzda görsel oyun kumandası talimatları varsa markasız bir kumanda resmi kullanın ve yalnızca Android ile uyumlu düğmelere yer verin.

Android uyumlu bir kumandanın örnek resimleri için Android TV Oyun Kumandası Şablonu'nu (ZIP) indirin. Bu pakette, siyah arka plan üzerinde beyaz bir kumanda ve beyaz arka plan üzerinde siyah bir kumanda (Şekil 1'de gösterilmiştir) PNG dosyası ve Adobe® Illustrator® dosyası olarak yer alır.

**Şekil 1.** Android TV Oyun Kumandası Şablonu'nu kullanan örnek kumanda talimatları.