TV donanımı diğer Android cihazlardan önemli ölçüde farklıdır. TV'ler; dokunmatik ekran, kamera ve GPS alıcıları gibi diğer Android cihazlarda bulunan donanım özelliklerinden bazılarına sahip değildir. TV'ler de tamamen ikincil donanım cihazlarına bağımlıdır: Kullanıcıların TV uygulamalarıyla etkileşimde bulunabilmesi için uzaktan kumanda veya oyun kumandası kullanması gerekir. TV için bir uygulama geliştirirken donanım sınırlamalarını ve TV donanımı üzerinde çalışmanın gereksinimlerini dikkatlice göz önünde bulundurmanız gerekir.
Bu kılavuzda, uygulamanızın TV'de çalışıp çalışmadığını nasıl kontrol edeceğiniz ve desteklenmeyen donanım özelliklerinin nasıl ele alınacağı gösterilmektedir. Çeşitli giriş yöntemleri hakkında bilgi edinmek için TV kumandalarını yönetme başlıklı makaleye bakın.
TV cihazı olup olmadığını kontrol edin
Hem TV cihazlarında hem de diğer cihazlarda çalışan bir uygulama oluşturuyorsanız uygulamanızın ne tür bir cihazda çalıştığını kontrol etmeniz ve uygulamanızın çalışmasını ayarlamanız gerekebilir. Örneğin, Intent
aracılığıyla başlatılabilen bir uygulamanız varsa TV odaklı bir etkinlik mi yoksa telefon etkinliği mi başlatacağınızı belirlemek için cihaz özelliklerini kontrol edin.
Uygulamanızın bir TV cihazında çalışıp çalışmadığını belirlemenin önerilen yolu, cihazın televizyon modunda çalışıp çalışmadığını kontrol etmek için PackageManager.hasSystemFeature()
yöntemini kullanmaktır. Aşağıdaki örnek kod, uygulamanızın bir TV cihazında çalışıp çalışmadığını nasıl kontrol edeceğinizi gösterir:
Kotlin
const val TAG = "DeviceTypeRuntimeCheck" val isTelevision = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK) if (isTelevision) { Log.d(TAG, "Running on a TV Device") } else { Log.d(TAG, "Running on a non-TV Device") }
Java
public static final String TAG = "DeviceTypeRuntimeCheck"; boolean isTelevision = getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); if (isTelevision) { Log.d(TAG, "Running on a TV Device"); } else { Log.d(TAG, "Running on a non-TV Device"); }
Desteklenmeyen donanım özelliklerini işleme
Uygulamanızın tasarımına ve işlevine bağlı olarak, kullanılamayan belirli donanım özelliklerini düzeltebilirsiniz. Bu bölümde TV'de genellikle hangi donanım özelliklerinin kullanılamadığı, eksik donanım özelliklerinin nasıl algılanacağı ve bu özellikler için hangi alternatiflerin önerildiği açıklanmaktadır.
Desteklenmeyen TV donanımı özellikleri
TV'ler diğer cihazlardan farklı bir amaca sahiptir ve bu nedenle diğer Android destekli cihazların genellikle sahip olduğu donanım özelliklerine sahip değildir. Bu nedenle, Android sistemi TV cihazlarında aşağıdaki özellikleri desteklemez:
Donanım | Android özellik açıklayıcı |
---|---|
Dokunmatik ekran | android.hardware.touchscreen |
Dokunmatik ekran emülatörü | android.hardware.faketouch |
Telefon Hizmeti | android.hardware.telephony |
Kamera | android.hardware.camera |
Near Field Communication (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Mikrofon | android.hardware.microphone |
Sensörler | android.hardware.sensor |
Ekran dikey yönde | android.hardware.screen.portrait |
Not: Bazı TV kumandalarında mikrofon bulunur. Bu mikrofon, burada açıklanan mikrofon donanımı özelliğiyle aynı değildir. Kumanda mikrofonu tam olarak destekleniyor.
Özelliklerin, alt özelliklerin ve tanımlayıcılarının tam listesi için Özellikler referansı bölümüne bakın.
TV için donanım gereksinimlerini tanımlama
Android uygulamaları, bu özelliklerin sağlanmadığı cihazlarda yüklenmediğinden emin olmak için uygulama manifest dosyalarında donanım özelliği gereksinimlerini beyan edebilir. Mevcut bir uygulamanın TV'de kullanımını genişletiyorsanız uygulamanızın TV cihazına yüklenmesini engelleyebilecek donanım şartı beyanları için uygulamanızın manifest dosyasını dikkatlice inceleyin.
Uygulamanız, TV'de bulunmayan dokunmatik ekran veya kamera gibi donanım özellikleri kullanıyor ancak bu özellikler kullanılmadan çalışabiliyorsa uygulamanızın manifest dosyasını, bu özelliklerin gerekli olmadığını belirtecek şekilde değiştirin. Aşağıdaki manifest kod snippet'inde, uygulamanızın TV cihazlarında kullanılamayan donanım özelliklerini gerektirmediğini, ancak TV dışındaki cihazlarda kullandığını nasıl beyan edeceğiniz gösterilmektedir:
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.faketouch" android:required="false"/> <uses-feature android:name="android.hardware.telephony" android:required="false"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.nfc" android:required="false"/> <uses-feature android:name="android.hardware.location.gps" android:required="false"/> <uses-feature android:name="android.hardware.microphone" android:required="false"/> <uses-feature android:name="android.hardware.sensor" android:required="false"/> <!-- Some TV devices have an ethernet connection only --> <uses-feature android:name="android.hardware.wifi" android:required="false"/>
Not:
Özellik referansında açıklandığı gibi bazı özelliklerin android.hardware.camera.front
gibi alt özellikleri vardır. Uygulamanızda kullanılan diğer alt özellikleri de required="false"
olarak işaretlediğinizden emin olun.
TV cihazlarında kullanılması amaçlanan tüm uygulamalar, TV uygulamalarını kullanmaya başlama bölümünde açıklandığı gibi dokunmatik ekran özelliğine gerek olmadığını beyan etmelidir. Uygulamanız normalde TV cihazları tarafından desteklenmeyen bir veya daha fazla özelliği kullanıyorsa manifest dosyanızdaki bu özellikler için android:required
özellik ayarını false
olarak değiştirin.
Dikkat: Bir donanım özelliğinin değerini true
olarak ayarlayarak gerekli olduğunu belirtirseniz, uygulamanızın TV cihazlarına yüklenmesini veya Android TV ana ekran başlatıcıda görünmesini engellersiniz.
Donanım özelliklerini ima eden izinlere dikkat edin.
Bazı uses-permission
manifest beyanları donanım özelliklerini belirtir. Bu davranış, uygulama manifestinizde bazı izinler istediğinizde uygulamanızın TV cihazlarında yüklenmesini ve kullanılmasını engelleyebileceği anlamına gelir. Aşağıdaki sıkça istenen izinler, dolaylı bir donanım özelliği gereksinimi oluşturur:
İzin | Örtülü donanım özelliği |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera ve android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Bazı TV cihazlarında yalnızca Ethernet bağlantısı vardır. |
Donanım özelliği gerektirdiğini belirten izin isteklerinin tam listesi için uses-feature
rehberine bakın. Uygulamanız daha önce listelenen özelliklerden birini istiyorsa ima edilen donanım özelliği için manifest dosyanıza bunun gerekli olmadığını belirten bir uses-feature
beyanı ekleyin. android:required="false"
.
Not: Uygulamanız Android 5.0 (API düzeyi 21) veya sonraki sürümleri hedefliyorsa ve ACCESS_COARSE_LOCATION
ya da ACCESS_FINE_LOCATION
iznini kullanıyorsa TV cihazında ağ kartı veya GPS alıcısı olmasa bile kullanıcılar uygulamanızı bir TV cihazına yükleyebilirler.
Donanım özelliklerini uygulamanız için isteğe bağlı hale getirdikten sonra, çalışma zamanında bu özelliklerin kullanılabilirliğini kontrol etmeniz ve ardından uygulamanızın davranışını ayarlamanız gerekir. Sonraki bölümde, donanım özelliklerinin nasıl kontrol edileceği açıklanmakta ve uygulamanızın davranışını değiştirmeyle ilgili bazı yaklaşımlar önerilmektedir.
Manifest'te filtreleme ve özellik bildirme hakkında daha fazla bilgi için uses-feature
rehberine bakın.
Donanım özelliklerini kontrol edin
Android çerçevesi, uygulamanızın çalıştığı cihazda donanım özelliklerinin mevcut olup olmadığını size bildirebilir. Çalışma zamanında belirli özellikleri kontrol etmek için hasSystemFeature(String)
yöntemini kullanın. Bu yöntem, kontrol etmek istediğiniz özelliği belirten tek dizeli bir bağımsız değişken alır.
Aşağıdaki kod örneği, çalışma zamanında donanım özelliklerinin kullanılabilirliğinin nasıl tespit edileceğini gösterir:
Kotlin
// Check whether the telephony hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls") } // Check whether android.hardware.touchscreen feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen.") }
Java
// Check whether the telephony hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls"); } // Check whether android.hardware.touchscreen feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen."); }
Dokunmatik ekran
Android, çoğu TV'de dokunmatik ekran bulunmadığından TV cihazları için dokunmatik ekran etkileşimini desteklemez. Ayrıca dokunmatik ekran kullanımı, kullanıcının ekrandan 3 metre uzakta oturduğu bir izleme ortamıyla tutarlı değildir. Kullanıcı arayüzü öğelerinizin ve metninizin dokunmatik ekran kullanımını gerektirmediğinden veya ima etmediğinden emin olun.
TV cihazlarında ise uygulamanızı TV uzaktan kumandasındaki yön tuşları (D-pad) kullanarak navigasyonu destekleyecek şekilde tasarlayın. TV'ye uygun denetimler kullanarak gezinmeyi düzgün bir şekilde destekleme hakkında daha fazla bilgi için TV'de gezinme konusuna bakın.
Kamera
Televizyonlarda genellikle kamera olmasa da TV'de fotoğrafçılıkla ilgili bir uygulama sağlayabilirsiniz. Örneğin, fotoğraf çeken, görüntüleyen ve düzenleyen bir uygulamanız varsa TV'ler için fotoğraf alma işlevini devre dışı bırakabilir, kullanıcıların da fotoğrafları görüntülemesine ve hatta düzenlemesine izin verebilirsiniz. Kamerayla ilgili uygulamanızın TV'de çalışmasını etkinleştirirseniz uygulama manifestinize aşağıdaki özellik beyanını ekleyin:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Uygulamanızı kamera olmadan çalışacak şekilde etkinleştirirseniz uygulamanıza, kamera özelliğinin kullanılabilir olup olmadığını algılayan ve uygulamanızın işleyişinde ayarlamalar yapan bir kod ekleyin. Aşağıdaki kod örneğinde, kameranın olup olmadığının nasıl algılanacağı gösterilmektedir:
Kotlin
// Check whether the camera hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!") } else { Log.d("Camera test", "No camera available. View and edit features only.") }
Java
// Check whether the camera hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!"); } else { Log.d("Camera test", "No camera available. View and edit features only."); }
GPS
TV'ler sabit, iç mekanda kullanılan cihazlardır ve yerleşik küresel konumlandırma sistemi (GPS) alıcıları yoktur. Uygulamanız konum bilgilerini kullansa da kullanıcıların konum aramalarına izin verebilir veya TV cihazı kurulumu sırasında yapılandırılan posta kodu gibi statik bir konum sağlayıcı kullanabilirsiniz.
Kotlin
// Request a static location from the location manager. val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager val location: Location = locationManager.getLastKnownLocation("static") // Attempt to get postal code from the static location object. val geocoder = Geocoder(this) val address: Address? = try { geocoder.getFromLocation(location.latitude, location.longitude, 1)[0] .apply { Log.d(TAG, postalCode) } } catch (e: IOException) { Log.e(TAG, "Geocoder error", e) null }
Java
// Request a static location from the location manager. LocationManager locationManager = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation("static"); // Attempt to get postal code from the static location object. Geocoder geocoder = new Geocoder(this); Address address = null; try { address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1).get(0); Log.d("Postal code", address.getPostalCode()); } catch (IOException e) { Log.e(TAG, "Geocoder error", e); }
Düşük güç modunda oynatmayı duraklat
Bazı TV cihazları, kullanıcı cihazı kapattığında düşük güç modunu destekler. Cihazı kapatmak yerine, ekranı devre dışı bırakır ve Android TV'yi arka planda çalışır durumda tutar. Ses çıkışı bu modda hâlâ etkin olduğundan, cihaz düşük güç modundayken oynatılan tüm içerikleri durdurun.
Düşük güç modunda oynatmayı önlemek için onStop()
değerini geçersiz kılın ve şu anda oynatılan içeriği durdurun:
Kotlin
override fun onStop() { // App-specific method to stop playback. stopPlayback() super.onStop() }
Java
@Override public void onStop() { // App-specific method to stop playback. stopPlayback(); super.onStop(); }
Uygulamanız etkin ön plan uygulamasıysa kullanıcı gücü tekrar açtığında onStart()
çağrılır. Bir etkinliği başlatma ve durdurmayla ilgili daha fazla bilgi için
Etkinlik yaşam döngüsü bölümüne bakın.