Hardware TV jauh berbeda dengan perangkat Android lainnya. TV tidak menyertakan beberapa fitur perangkat keras yang ditemukan di perangkat Android lain, seperti layar sentuh, kamera, dan penerima GPS. TV juga sepenuhnya bergantung pada perangkat hardware sekunder: bagi pengguna untuk berinteraksi dengan aplikasi TV, mereka harus menggunakan remote control atau game pad. (Untuk mempelajari berbagai metode input, lihat Mengelola pengontrol TV.)
Saat Anda membangun aplikasi untuk TV, pertimbangkan dengan cermat keterbatasan dan persyaratan perangkat keras yang beroperasi pada perangkat keras TV. Periksa apakah aplikasi Anda berjalan di TV dan menangani masalah yang tidak didukung fitur hardware tambahan.
Memeriksa perangkat TV
Jika Anda membangun aplikasi yang beroperasi di perangkat TV dan perangkat lainnya, Anda mungkin perlu
memeriksa jenis perangkat yang menjalankan aplikasi Anda dan menyesuaikan pengoperasian aplikasi. Sebagai
instance, jika Anda memiliki aplikasi yang dapat dimulai melalui Intent
,
periksa properti perangkat untuk menentukan apakah akan memulai berorientasi TV
atau aktivitas ponsel.
Cara yang direkomendasikan untuk menentukan apakah aplikasi Anda berjalan di perangkat TV adalah dengan menggunakan metode PackageManager.hasSystemFeature()
untuk memeriksa
apakah perangkat beroperasi
dalam mode televisi. Kode contoh berikut menunjukkan cara memeriksa apakah
aplikasi Anda berjalan di perangkat TV:
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"); }
Menangani fitur hardware yang tidak didukung
Tergantung pada desain dan fungsionalitas aplikasi, Anda mungkin dapat bekerja di sekitar fitur hardware yang tidak tersedia. Bagian ini membahas fitur perangkat keras yang biasanya tidak tersedia untuk TV, cara mendeteksi fitur perangkat keras yang hilang, dan alternatif apa yang disarankan untuk fitur-fitur ini.
Fitur hardware TV yang tidak didukung
TV memiliki tujuan yang berbeda dari perangkat lainnya, sehingga tidak memiliki fitur perangkat keras yang sering dimiliki perangkat berbasis Android lainnya. Karena alasan ini, sistem Android tidak mendukung fitur berikut untuk perangkat TV:
Hardware | Deskriptor fitur Android |
---|---|
Layar sentuh | android.hardware.touchscreen |
Emulator layar sentuh | android.hardware.faketouch |
Telepon | android.hardware.telephony |
Kamera | android.hardware.camera |
Komunikasi Nirkabel Jarak Dekat (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Mikrofon | android.hardware.microphone |
Sensor | android.hardware.sensor |
Layar berorientasi potret | android.hardware.screen.portrait |
Catatan: Beberapa pengontrol TV memiliki mikrofon, yaitu tidak sama dengan fitur perangkat keras mikrofon yang dijelaskan di sini. Mikrofon pengontrol sepenuhnya didukung.
Lihat Referensi fitur untuk mengetahui daftar lengkap fitur, subfitur, dan deksriptornya.
Mendeklarasikan persyaratan hardware untuk TV
Aplikasi Android bisa mendeklarasikan persyaratan fitur hardware dalam manifes aplikasi untuk membantu memastikan bahwa mereka tidak diinstal pada perangkat yang tidak menyediakan fitur tersebut. Jika Anda memperluas langganan untuk digunakan di TV, tinjau dengan cermat manifes aplikasi Anda untuk setiap persyaratan hardware deklarasi yang mungkin mencegahnya diinstal di perangkat TV.
Jika aplikasi Anda menggunakan fitur hardware seperti layar sentuh atau kamera yang tidak tersedia di TV, tetapi dapat beroperasi tanpa menggunakan fitur tersebut, ubah manifes aplikasi Anda untuk menunjukkan bahwa fitur ini tidak diperlukan. Cuplikan kode manifes berikut menunjukkan cara mendeklarasikan bahwa aplikasi Anda tidak memerlukan fitur hardware yang tidak tersedia di perangkat TV, tetapi menggunakan fitur tersebut di perangkat non-TV:
<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"/>
Catatan: Beberapa fitur memiliki subfitur, seperti android.hardware.camera.front
,
sebagaimana dijelaskan dalam
Referensi fitur. Pastikan untuk menandai subfitur yang juga digunakan dalam aplikasi Anda sebagai required="false"
.
Semua aplikasi yang ditujukan untuk digunakan di perangkat TV harus mendeklarasikan bahwa fitur layar sentuh tidak diperlukan,
seperti yang dijelaskan dalam Memulai
Aplikasi TV. Jika aplikasi Anda biasanya menggunakan satu atau beberapa fitur yang tidak didukung oleh perangkat TV, ubah
Menyetel atribut android:required
ke false
untuk fitur tersebut dalam manifes Anda.
Perhatian: Mendeklarasikan fitur hardware yang diperlukan dengan menyetelnya
nilai ke true
mencegah aplikasi diinstal di TV
perangkat atau yang muncul di peluncur layar utama Android TV.
Waspadai izin yang menyiratkan fitur hardware
Beberapa uses-permission
deklarasi manifes menyiratkan fitur hardware. Perilaku ini berarti
bahwa meminta beberapa
izin dalam manifes aplikasi dapat mengecualikan aplikasi agar tidak diinstal dan digunakan di TV
perangkat. Izin yang sering diminta berikut ini membuat fitur hardware implisit
persyaratan:
Izin | Fitur hardware yang diimplikasikan |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera dan android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Beberapa perangkat TV hanya memiliki koneksi ethernet. |
Untuk daftar lengkap permintaan izin yang menyiratkan persyaratan fitur hardware, lihat
uses-feature
kami. Jika aplikasi Anda meminta salah satu fitur yang sebelumnya tercantum, sertakan
uses-feature
dalam manifes Anda untuk fitur hardware tersirat yang menunjukkan bahwa
tidak diperlukan. android:required="false"
.
Catatan: Jika aplikasi Anda menargetkan Android 5.0 (API level 21) atau
yang lebih tinggi dan menggunakan ACCESS_COARSE_LOCATION
atau
ACCESS_FINE_LOCATION
, pengguna tetap dapat menginstal
di perangkat TV, meskipun perangkat TV tersebut tidak memiliki kartu jaringan atau GPS
penerima.
Setelah membuat fitur hardware opsional untuk aplikasi, Anda harus memeriksa ketersediaan fitur tersebut saat runtime, lalu menyesuaikan perilaku aplikasi Anda. Bagian berikutnya membahas cara memeriksa fitur perangkat keras dan menyarankan beberapa pendekatan untuk mengubah perilaku model aplikasi Anda.
Untuk informasi selengkapnya tentang memfilter dan mendeklarasikan fitur dalam manifes, lihat
uses-feature
kami.
Memeriksa fitur hardware
Framework Android bisa memberi tahu Anda jika fitur hardware tidak tersedia di perangkat yang
aplikasi Anda berjalan. Menggunakan hasSystemFeature(String)
untuk memeriksa fitur tertentu pada runtime. Metode ini mengambil argumen {i>string<i} tunggal yang
menentukan fitur yang ingin Anda periksa.
Contoh kode berikut menunjukkan cara mendeteksi ketersediaan fitur hardware pada runtime:
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."); }
Layar sentuh
Karena sebagian besar TV tidak memiliki layar sentuh, Android tidak mendukung interaksi layar sentuh untuk perangkat TV. Selain itu, penggunaan layar sentuh tidak sesuai dengan lingkungan menonton di mana pengguna duduk sejauh 3 meter dari layar. Pastikan elemen UI dan teks tidak membutuhkan atau menyiratkan penggunaan layar sentuh.
Untuk perangkat TV, desain aplikasi agar mendukung navigasi yang menggunakan tombol arah (D-pad) pada remote control TV. Untuk mengetahui informasi selengkapnya tentang mendukung navigasi dengan benar menggunakan kontrol yang sesuai untuk TV, lihat Navigasi TV.
Kamera
Meskipun TV biasanya tidak memiliki kamera, Anda masih dapat menyediakan informasi di TV. Misalnya, jika memiliki aplikasi yang mengambil, melihat, dan mengedit foto, Anda dapat menonaktifkan fungsi pengambilan gambarnya untuk TV dan masih mengizinkan pengguna melihat dan bahkan mengedit foto. Jika Anda memutuskan untuk mengaktifkan aplikasi terkait kamera agar berfungsi di TV, tambahkan deklarasi fitur berikut pada manifes aplikasi Anda:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Jika Anda mengaktifkan aplikasi untuk berjalan tanpa kamera, tambahkan kode ke aplikasi yang mendeteksi apakah fitur kamera tersedia dan membuat penyesuaian pada pengoperasian . Contoh kode berikut menunjukkan cara mendeteksi keberadaan kamera:
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 adalah perangkat dalam ruangan yang tidak bergerak dan tidak memiliki sistem pemosisi global (GPS) bawaan penerima. Jika aplikasi Anda menggunakan informasi lokasi, Anda tetap dapat mengizinkan pengguna menelusuri lokasi atau menggunakan penyedia lokasi statis seperti kode pos yang dikonfigurasi selama perangkat TV penyiapan.
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); }
Menjeda pemutaran dalam mode daya rendah
Beberapa perangkat TV mendukung mode daya rendah saat pengguna mematikan perangkat. Perangkat tidak dimatikan, tetapi akan menonaktifkan layar dan menjaga Android TV berjalan di latar belakang. Output audio masih diaktifkan dalam mode ini, jadi menghentikan konten yang sedang diputar saat perangkat dalam mode daya rendah.
Untuk menghindari pemutaran dalam mode daya rendah, ganti
onStop()
dan menghentikan konten yang sedang diputar:
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(); }
Saat pengguna menyalakan kembali daya, onStart()
dipanggil
jika aplikasi Anda merupakan aplikasi latar depan yang aktif. Untuk informasi selengkapnya tentang cara memulai dan menghentikan
aktivitas, melihat
Siklus proses aktivitas.