TV donanımı diğer Android cihazlardan önemli ölçüde farklıdır. TV'ler diğer Android cihazlarda bulunan dokunmatik ekran, kameralar ve GPS alıcıları. Ayrıca TV'ler de tamamen ikincil donanım cihazlarına bağlıdır: Kullanıcıların TV uygulamalarıyla etkileşimde bulunabilmeleri için uzaktan kumanda veya oyun kumandası kullanmaları gerekir. (Daha fazla bilgi için çeşitli giriş yöntemleri için TV kumandalarını yönetme bölümüne bakın.)
TV için uygulama geliştirirken, uygulamanın donanım sınırlamalarını ve gereksinimlerini TV donanımında çalıştırmayı deneyin. Uygulamanızın bir TV'de çalışıp çalışmadığını ve desteklenmeyen herkese açık kullanıcı adı olup olmadığını kontrol etme donanım özelliklerini kullanıyor.
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 edebilir ve çalışmasını düzenleyebilir. Örneğin,
Örneğin, Intent
üzerinden başlatılabilen bir uygulamanız varsa,
TV odaklı bir cihazın başlatılıp başlatılmayacağını belirlemek için cihaz özelliklerini kontrol edin
telefon etkinliğiyle yüklü olabilir.
Uygulamanızın bir TV cihazında çalışıp çalışmadığını belirlemenin önerilen yolu, PackageManager.hasSystemFeature()
yöntemini kullanarak
cihazın televizyon modunda çalışıp çalışmadığı. Aşağıdaki örnek kod,
Uygulamanız bir TV cihazında çalışıyor:
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 ele alma
Uygulamanızın tasarımına ve işlevine bağlı olarak, belirli bir sorunu çözmek için donanım özelliklerinin kullanılamamasına yol açabilir. Bu bölümde, genellikle hangi donanım özelliklerinin TV'de kullanılamıyor, eksik donanım özelliklerinin nasıl algılanacağı ve özellikler.
Desteklenmeyen TV donanımı özellikleri
TV'lerin amacı diğer cihazlardan farklı olduğundan, TV'lerde diğer Android destekli cihazlarda genellikle vardır. Bu nedenle Android sistemi TV cihazı için aşağıdaki özellikler:
Donanım | Android özellik açıklayıcısı |
---|---|
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ının burada açıklanan mikrofon donanımı özelliğiyle aynı değildir. Kumanda mikrofonu tamamen dolu desteklenir.
Bkz. Özelliklerin, alt özelliklerin ve tanımlayıcılarının tam listesi için özellikler referansını inceleyin.
TV için donanım gereksinimlerini beyan etme
Android uygulamaları, aşağıdakilerin sağlanmasına yardımcı olmak için uygulama manifest'inde donanım özelliği gereksinimlerini beyan edebilir: bu özellikleri sağlamayan cihazlara yüklenmediğinden emin olun. Mevcut bir TV'de kullanım için uygulamanız varsa donanım gereksinimleri için uygulamanızın manifest dosyasını yakından inceleyin yüklenmesini önleyebilecek beyanlar bulmanızı sağlar.
Uygulamanızda, dokunmatik ekran veya kamera gibi bulunmayan donanım özellikleri kullanılıyorsa TV'yi kullanıyor ancak bu özellikler kullanılmadan da çalışabiliyorsa uygulamanızın manifestini bu özelliklerin gerekli olmadığını belirtir. Aşağıdaki manifest kodu snippet'i uygulamanızın, kullanılamayan donanım özelliklerini gerektirmediğini nasıl beyan edeceğinizi gösterir. ancak TV dışındaki cihazlarda şu özellikleri kullanır:
<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: Bazı özelliklerin alt özellikleri vardır. Örneğin: android.hardware.camera.front
,
Özellik referansı. Uygulamanızda kullanılan tüm alt özellikleri de required="false"
olarak işaretlediğinizden emin olun.
TV cihazlarında kullanılması tasarlanan tüm uygulamalar, dokunmatik ekran özelliğinin zorunlu olmadığını beyan etmelidir.
TV uygulamaları. Uygulamanız normalde TV cihazlarının desteklemediği özelliklerden birini veya daha fazlasını kullanıyorsa
Manifest dosyanızdaki bu özellikler için android:required
özellik ayarını false
olarak belirleyin.
Dikkat: Bir donanım özelliğini ayarlayarak
true
değeri, uygulamanızın TV'ye yüklenmesini engeller
cihazlarda veya Android TV ana ekran başlatıcıda görünen
Donanım özelliklerini ima eden izinlere dikkat edin
Bazı uses-permission
manifesto beyanlarını yalnızca donanım özellikleri olarak tanımlar. Bu davranış, sizden bazı
uygulama manifestinizdeki izinler, uygulamanızın TV'de yüklenmesini ve kullanılmasını engelleyebilir
cihazlar. Aşağıdaki yaygın olarak istenen izinler, örtülü bir donanım özelliği oluşturur
Şart:
İzin | Dolaylı 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 gereksinimi olduğunu belirten izin isteklerinin tam listesi için şu sayfaya göz atın:
uses-feature
rehberini inceleyin. Uygulamanız daha önce listelenen özelliklerden birini istiyorsa
uses-feature
manifest dosyanızdaki beyanda,
gereklidir. android:required="false"
.
Not: Uygulamanız Android 5.0 (API düzeyi 21) veya
daha yüksek ve ACCESS_COARSE_LOCATION
ya da
ACCESS_FINE_LOCATION
izniniz varsa kullanıcılar
TV cihazındaki ağ kartı veya GPS olmasa bile, TV cihazındaki uygulama
alıcı.
Uygulamanız için donanım özelliklerini isteğe bağlı hale getirdikten sonra, sonra da uygulamanızın davranışını düzenleyebilir. Sonraki bölüm , donanım özelliklerinin nasıl kontrol edileceğini tartışır ve en iyi uygulamaları paylaşacağız.
Manifest'teki filtreleme ve özellikleri bildirme hakkında daha fazla bilgi için
uses-feature
rehberini inceleyin.
Donanım özelliklerini kontrol edin
Android çerçevesi, cihazda donanım özelliklerinin kullanılamadığı durumlarda
nasıl çalıştığını gösterir. hasSystemFeature(String)
kullanın
yöntemini kontrol etmek için kullanılır. Bu yöntem,
kontrol etmek istediğiniz özelliği belirtir.
Aşağıdaki kod örneğinde, donanım özelliklerinin kullanılabilirliğinin nasıl algılanacağı gösterilmektedir çalışma zamanında:
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
Çoğu TV'de dokunmatik ekran bulunmadığından Android, TV cihazları. Ayrıca, dokunmatik ekran kullanmak, "ekranda görünme" veya kullanıcı ekrandan 3 metre uzakta oturuyor. Kullanıcı arayüzü öğelerinizin ve metninizin Dokunmatik ekran kullanımını gerektiren veya ima eden içerikler.
TV cihazlarında uygulamanızı, YouTube TV'yi destekleyen TV uzaktan kumandasındaki yön tuşlarını (D-pad) kullanarak gezinme. Daha fazla bilgi için TV'ye uygun kontrolleri kullanarak navigasyonu düzgün şekilde desteklemesine yardımcı olma TV'de gezinme.
Kamera
Televizyonda normalde kamerası olmasa da fotoğrafçılıkla ilgili TV'de görebilirsiniz. Örneğin, fotoğraf çeken, görüntüleyen ve düzenleyen bir uygulamanız varsa TV'lerde resim çekme işlevini devre dışı bırakıp kullanıcıların görüntülemesine, hatta düzenlemesine fotoğraf. Kamerayla ilgili uygulamanızın TV'de çalışmasına karar verirseniz uygulama manifestinizdeki şu ö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 kod ekleyin kamera özelliğinin kullanılabilir olup olmadığını tespit eden ve kameranızın çalışmasında düzenlemeler yapan uygulamasını indirin. Aşağıdaki kod örneğinde, kamera 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ç mekandaki cihazlardır ve yerleşik küresel konumlandırma sistemine (GPS) sahip değildir. alıcı'lar. Uygulamanız konum bilgilerini kullanıyorsa, kullanıcıların TV cihazı sırasında yapılandırılmış bir konum veya posta kodu gibi statik bir konum sağlayıcı kullanma kurulumu.
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 kapanmak yerine ekranı devre dışı bırakır ve Android'i kullanmaya devam eder. Arka planda çalışan TV. Ses çıkışı bu modda hâlâ etkindir. Dolayısıyla, cihaz düşük güç modundayken oynatılan tüm içerikleri durdurur.
Düşük güç modunda çalmayı önlemek için
onStop()
.
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(); }
Kullanıcı gücü tekrar açtığında onStart()
çağrılır.
Ön plan uygulamanız olup olmadığını kontrol edin. Başlatma ve durdurma hakkında daha fazla bilgi için
bir etkinlik varsa
Etkinlik yaşam döngüsü.