TV cihazlarında uygulamalarla etkileşim için ikincil bir donanım cihazı (temel uzaktan kumanda, işaretçi uzaktan kumanda veya oyun kumandası) gerekir. Tutarlı bir kullanıcı deneyimi sağlamak için uygulamanız yön tuşu (D-pad) girişini desteklemeli, kumandaların çevrimdışı kalmasını işlemeli ve işaretçi uzaktan kumandalar da dahil olmak üzere birden fazla kumanda türünden girişi desteklemelidir.
D-pad minimum kontrolleri
TV cihazı için varsayılan denetleyici, D-pad'dir. Genel olarak uygulamanız yalnızca yukarı, aşağı, sol, sağ, seç, geri ve ana sayfa düğmelerine sahip bir uzaktan kumanda ile çalıştırılabilmelidir. Uygulamanız genellikle ek kontroller içeren bir oyun kumandası gerektiren bir oyunsa oyunu yalnızca bu D-pad kontrolleriyle desteklemeye çalışın. Aksi takdirde, kullanıcıyı kontrol cihazının gerekli olduğu konusunda uyarın ve D-pad kontrol cihazını kullanarak oyundan sorunsuz bir şekilde çıkmasına izin verin.
TV cihazlarında D-pad denetleyicilerle gezinme hakkında daha fazla bilgi için 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, belirli aralıklarla uyku moduna girip TV cihazıyla bağlantısını keserek güç tasarrufu yapmaya çalışabilir. Bu, yeniden bağlanma etkinliklerini işleyecek şekilde yapılandırılmamışsa bir uygulamanın kesintiye uğrayabileceği veya yeniden başlatılabileceği anlamına gelir. Bu etkinlikler aşağıdaki durumlarda gerçekleşebilir:
- Birkaç dakika süren 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 önceden bağlanmamış bir oyun kumandası kullanarak oyuna katılabilir.
- Oyun sırasında oyuncu oyundan ayrılabilir 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 yeniden bağlanma etkinliği sırasında Android çerçevesi tarafından yeniden başlatılmak yerine çalışmaya devam etmesini sağlar. Bu, iyi bir kullanıcı deneyimi değildir.
D-pad giriş varyasyonlarını işleme
TV cihazı kullanıcıları, TV'leriyle kullandıkları birden fazla kumanda türüne sahip olabilir. Örneğin, kullanıcılar temel bir D-pad denetleyici, işaretçi uzaktan kumanda veya oyun kumandası kullanabilir. D-pad işlevleri için kullanılan bir oyun kumandası tarafından sağlanan tuş kodları, temel bir D-pad tarafından gönderilen tuş kodlarından farklı olabilir.
D-pad girişindeki farklılıkları ele alın. Böylece kullanıcı, uygulamanızı çalıştırmak için kontrol cihazını değiştirmek zorunda kalmaz. Giriş farklılıklarını ele alma 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 pedleri (izleme paneli) olan uzaktan kumandalar gibi işaretçi uzaktan kumandalarını destekler. İşaretçi uzaktan kumandaları desteklemek, kullanıcıların uygulamanızla etkileşim kurmak için işaretle ve tıkla, üzerine gelme, kaydırma ve sürükleme hareketlerini kullanmasına olanak tanır. Bu sayede, tam D-pad uyumluluğunu korurken uyumlu donanımlarda daha akıcı bir deneyim sunulur.
Manifest'te işaretçi uzaktan kumanda desteğini bildirme
Uygulamanızda işaretçi ve dokunma girişiyle gezinilebildiğini belirtmek için uygulama manifestinizi android.software.leanback.supports_touch meta verileri true olarak ayarlanmış şekilde 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" />
<!-- Signal whether the app supports pointer remotes -->
<meta-data
android:name="android.software.leanback.supports_touch"
android:value="true" />
<application ...>
...
</application>
</manifest>
Tıklama, fareyle üzerine gelme ve kaydırma etkileşimlerini destekler.
İşaretçi uzaktan kumandalarını desteklerken kullanıcı arayüzü bileşenlerinizin aşağıdaki etkileşimlerde imleç ve dokunma girişine uygun şekilde yanıt verdiğinden emin olun:
- Tıklama ve seçim: Odaklanılabilir ve seçilebilir tüm kullanıcı arayüzü öğeleri, d-pad seçimi davranışına (
KEYCODE_DPAD_CENTER) uygun şekilde işaretçi uzaktan kumandayla tıklanabilir olmalıdır.- Jetpack Compose:
Modifier.clickable()veyapointerInputdeğiştiricilerini kullanın. Daha fazla bilgi için Dokunma ve basma başlıklı makaleyi inceleyin. - Görünümler: Görünümlerdeki tıklama etkinliklerini işler. Daha fazla bilgi için Giriş etkinliklerine genel bakış başlıklı makaleyi inceleyin.
- Jetpack Compose:
- Görsel fareyle üzerine gelme durumları: İşaretçi imleci seçilebilir bir öğenin üzerine geldiğinde bunu belirtmek için net bir görsel fareyle üzerine gelme efekti sağlar.
- Jetpack Compose:
Modifier.hoverable()kullanın veyaInteractionSourcekullanarak fareyle üzerine gelme durumlarını gözlemleyin. Daha fazla bilgi için Kullanıcı etkileşimlerini işleme başlıklı makaleyi inceleyin. - Görünümler: state-list drawables ile
android:state_hovered="true"kullanarak fareyle üzerine gelme durumlarını tanımlayın.
- Jetpack Compose:
- 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, kaydırılabilir tüm içeriklerde sorunsuz çalışmalıdır.
- Sürükleyerek kaydırma: Kullanıcılar, kaydırılabilir kapsayıcılarda dikey (yukarı ve aşağı) veya yatay (sol ve sağ) olarak kaydırmak için sürükleyebilmelidir.
- Jetpack Compose: Standart kaydırılabilir kapsayıcılar, varsayılan olarak işaretçi ve dokunarak kaydırma işlemlerini destekler. Özel uygulamalar için Oluşturma'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ş başlıklı makaleyi inceleyin.
- Medya oynatma sırasında sarma: Medya oynatma (ör. TV programları ve filmler) sırasında kullanıcılar, oynatma ilerleme çubuğuyla (arama çubuğu) etkileşimde bulunabilmelidir. Bu etkileşim, geçmiş veya gelecekteki bir zaman damgasına gitmek için işaretleme ve tıklama işlemlerinin yanı sıra belirli bir zamana gitmek için ilerleme çubuğu boyunca sürükleme (sarma) işlemlerini içerir.
Düğme etkinliklerini işleme
Kullanıcı bir kontrol cihazındaki 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 bir TV etkinliği olabilir. İyi bir kullanıcı deneyimi sunmak için kontrol cihazı düğmelerine tutarlı davranışlar atayın.
TV kullanıcı arayüzü etkinlikleri
Aşağıdaki tabloda gösterildiği gibi, KeyEvent türleri oluşturan düğmelere TV kullanıcı arayüzü davranışı 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ürleri oluşturan düğmelere davranış atayın. Uygulamanız bir MediaSession kontrol ediyorsa tablodaki 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 |
Uygun geri düğmesi davranışı sağlama
Geri düğmesi asla 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 gezinmek için kullanın.
Geri düğmesi yalnızca doğrusal ve geriye doğru gezinme işlemi yaptığından, 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 için tasarım hakkında daha fazla bilgi edinmek istiyorsanız Geri ve Yukarı gezinme tasarımı başlıklı makaleyi inceleyin. Uygulama hakkında bilgi edinmek için Uygun geri gezinme sağlama başlıklı makaleyi inceleyin.
Oyun kumandalarını kullanma
Android TV için oyun geliştirirken kontrol şemanızı hem standart TV uzaktan kumandalarıyla hem de özel oyun kumandalarıyla çalışacak şekilde tasarlayın.
D-pad kontrollerini destekleme
Android TV cihazlarda varsayılan kontrol seti bu olduğundan, kontrol şemanızı D-pad kontrolü etrafında planlayın. Oyuncunun, oyunun tüm yönleri için (yalnızca temel oynanışı kontrol etmekle kalmayıp menülerde ve reklamlarda gezinmek için de) D-pad kullanabilmesi gerekir. Bu nedenle, Android TV oyununuzda "Devam etmek için buraya dokunun" gibi bir ifadeyle dokunma arayüzüne atıfta bulunmadığınızdan emin olun.
Oyuncunun kontrol cihazıyla etkileşimini nasıl şekillendirdiğiniz, mükemmel bir kullanıcı deneyimi elde etmenin anahtarı olabilir. Aşağıdaki en iyi uygulamalardan yararlanabilirsiniz:
- Kontrol cihazı gereksinimlerini önceden bildirin: Google Play açıklamanızı kullanarak oyuncuya kontrol cihazlarıyla ilgili beklentileri iletin. Bir oyunun yalnızca D-pad'e sahip bir oyun kumandası yerine kontrol çubuğu olan bir oyun kumandasıyla daha iyi oynandığını belirtin. Bir oyunda uygun olmayan bir kontrol cihazı kullanan oyuncu, kötü bir deneyim yaşayabilir ve oyununuza kötü bir 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, A düğmesini kabul etmek, B düğmesini ise iptal etmek için kullanarak kabul edilen geleneklere uyun. Ayrıca, kullanıcının düğmeleri yeniden eşlemesine izin vererek esneklik de sunabilirsiniz. Düğme eşleme hakkında daha fazla bilgi için Kumanda işlemlerini ele alma başlıklı makaleyi inceleyin.
- Denetleyici özelliklerini algılama ve buna göre ayarlama: Denetleyici ile oyun arasındaki eşleşmeyi optimize etmek için denetleyicinin özelliklerini sorgulayın. Örneğin, bir oyuncunun kumandayı havada sallayarak bir nesneyi yönlendirmesini isteyebilirsiniz. Ancak oyuncunun kumandasında ivmeölçer ve jiroskop donanımı yoksa sallama işlemi çalışmaz. Kumandayı sorgulayın ve hareket algılama desteklenmiyorsa alternatif bir kontrol şemasına geçin. Denetleyici özelliklerini sorgulama hakkında daha fazla bilgi için Android sürümlerinde denetleyici desteği başlıklı makaleyi inceleyin.
Uygun düğmeleri kullanma
Bazı oyun kumandalarında Başlat, Arama 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ı kullanma
Birden fazla oyuncu kendi kontrol cihazıyla oyun oynarken her oyuncu-kontrol cihazı çiftini eşlemek önemlidir. Kontrol cihazı numarası tanımlamayı uygulama hakkında bilgi için getControllerNumber() başlıklı makaleyi inceleyin.
Kumanda bağlantısının kesilmesini yönetme
Oyun sırasında kumandanın bağlantısı kesildiğinde oyunu duraklatın ve bağlantısı kesilen oyuncuyu kumandasını yeniden bağlamaya yönlendiren bir iletişim kutusu gösterin.
Ayrıca, iletişim kutusunda sorun giderme ipuçları da sunun. Örneğin, oyuncuya "Bluetooth bağlantınızı kontrol edin" mesajını gösterin. Giriş cihazı desteğini uygulama hakkında daha fazla bilgi için Denetleyici işlemlerini işleme ve Bluetooth'a genel bakış başlıklı makaleleri inceleyin.
Kumanda talimatlarını göster
Oyununuzda görsel oyun kontrolü talimatları veriliyorsa marka içermeyen bir kumanda resmi kullanın ve yalnızca Android ile uyumlu düğmeleri ekleyin.
Android ile uyumlu bir kontrol cihazının örnek resimleri için Android TV Gamepad Şablonu (ZIP) dosyasını indirin. 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.