ฮาร์ดแวร์ของทีวีแตกต่างจากอุปกรณ์ Android อื่นๆ อย่างมาก ทีวีใช้ไม่ได้ รวมถึงคุณลักษณะของฮาร์ดแวร์ที่พบในอุปกรณ์ Android อื่นๆ เช่น หน้าจอสัมผัส ของกล้อง และตัวรับสัญญาณ GPS ทีวีจะขึ้นอยู่กับอุปกรณ์ฮาร์ดแวร์รองทั้งหมดด้วย: ในการโต้ตอบกับแอปทีวีได้ จะต้องใช้รีโมตคอนโทรลหรือแพดเกม (หากต้องการดูข้อมูลเกี่ยวกับ วิธีการป้อนข้อมูลต่างๆ โปรดดูจัดการตัวควบคุมทีวี)
เมื่อคุณสร้างแอปสำหรับทีวี โปรดพิจารณาอย่างรอบคอบถึงข้อจำกัดและข้อกำหนดของฮาร์ดแวร์สำหรับ ที่ทำงานบนฮาร์ดแวร์ทีวี ตรวจสอบว่าแอปทํางานในทีวีหรือไม่และจัดการที่ไม่รองรับ ฟีเจอร์ของฮาร์ดแวร์
ตรวจหาอุปกรณ์ทีวี
หากคุณกำลังสร้างแอปที่ทำงานทั้งในอุปกรณ์ทีวีและอุปกรณ์อื่นๆ คุณอาจต้อง
ให้ตรวจสอบประเภทอุปกรณ์ที่แอปของคุณทำงานอยู่แล้วปรับการทำงานของแอป สำหรับ
เช่น ถ้าคุณมีแอปที่สามารถเริ่มต้นผ่าน Intent
ตรวจสอบคุณสมบัติของอุปกรณ์เพื่อพิจารณาว่าจะเริ่มต้นการรับชมบนทีวีหรือไม่
กิจกรรมหรือกิจกรรมในโทรศัพท์
วิธีที่แนะนำในการระบุว่าแอปกำลังทำงานในอุปกรณ์ทีวีหรือไม่คือ ให้ใช้เมธอด PackageManager.hasSystemFeature()
เพื่อตรวจสอบ
อุปกรณ์กำลังทำงานในโหมดโทรทัศน์หรือไม่ โค้ดตัวอย่างต่อไปนี้จะแสดงให้คุณเห็นวิธีตรวจสอบว่า
ที่แอปของคุณกำลังทำงานบนอุปกรณ์ทีวี
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"); }
จัดการฟีเจอร์ของฮาร์ดแวร์ที่ไม่รองรับ
คุณอาจแก้ไขปัญหาบางอย่างได้ ทั้งนี้ขึ้นอยู่กับดีไซน์และฟังก์ชันการทำงานของแอป ฟีเจอร์ของฮาร์ดแวร์ไม่สามารถใช้งานได้ ส่วนนี้จะกล่าวถึงคุณลักษณะของฮาร์ดแวร์โดยทั่วไป ไม่พร้อมใช้งานสำหรับทีวี วิธีตรวจหาฟีเจอร์ของฮาร์ดแวร์ที่ขาดหายไป และทางเลือกอื่นที่แนะนำ ฟีเจอร์เหล่านี้
ฟีเจอร์ฮาร์ดแวร์ของทีวีที่ไม่รองรับ
ทีวีมีวัตถุประสงค์ที่แตกต่างจากอุปกรณ์อื่นๆ จึงไม่มีคุณลักษณะของฮาร์ดแวร์ที่ อุปกรณ์ที่ใช้ระบบ Android อื่นๆ ที่มักมี ด้วยเหตุนี้ ระบบ Android จึงไม่สนับสนุน ฟีเจอร์ต่อไปนี้สำหรับอุปกรณ์ทีวี
ฮาร์ดแวร์ | ข้อบ่งชี้ฟีเจอร์ของ Android |
---|---|
หน้าจอสัมผัส | android.hardware.touchscreen |
โปรแกรมจำลองหน้าจอสัมผัส | android.hardware.faketouch |
โทรศัพท์ | android.hardware.telephony |
กล้อง | android.hardware.camera |
Near Field Communications (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
ไมโครโฟน | android.hardware.microphone |
เซ็นเซอร์ | android.hardware.sensor |
หน้าจอในแนวตั้ง | android.hardware.screen.portrait |
หมายเหตุ: ตัวควบคุมทีวีบางรุ่นมีไมโครโฟน ไม่เหมือนกับฟีเจอร์ฮาร์ดแวร์ของไมโครโฟนที่อธิบายที่นี่ ไมโครโฟนของตัวควบคุมเต็ม ที่รองรับ
โปรดดู ข้อมูลอ้างอิงเกี่ยวกับฟีเจอร์เพื่อดูรายการฟีเจอร์ ฟีเจอร์ย่อย และข้อบ่งชี้ทั้งหมด
ประกาศข้อกำหนดฮาร์ดแวร์สำหรับทีวี
แอป Android สามารถประกาศข้อกำหนดฟีเจอร์ของฮาร์ดแวร์ในไฟล์ Manifest ของแอปเพื่อช่วยดูแลให้ ที่ไม่ได้ติดตั้งในอุปกรณ์ที่ไม่มีคุณลักษณะเหล่านั้น หากคุณต้องการขยายเวลา แอปสำหรับการใช้งานบนทีวี โปรดตรวจสอบไฟล์ Manifest ของแอปอย่างละเอียดเพื่อหาข้อกำหนดด้านฮาร์ดแวร์ ที่อาจป้องกันไม่ให้ติดตั้งในอุปกรณ์ทีวี
หากแอปใช้ฟีเจอร์ฮาร์ดแวร์ เช่น หน้าจอสัมผัสหรือกล้องที่ไม่มีอยู่ใน ทีวี แต่ทำงานได้โดยไม่ต้องใช้คุณลักษณะเหล่านั้น ให้แก้ไขไฟล์ Manifest ของแอปให้ บ่งบอกว่าฟีเจอร์เหล่านี้ไม่จำเป็น ข้อมูลโค้ดไฟล์ Manifest ต่อไปนี้ แสดงวิธีประกาศว่าแอปของคุณไม่ต้องใช้ฟีเจอร์ของฮาร์ดแวร์ที่ไม่พร้อมใช้งาน บนอุปกรณ์ทีวี แต่ใช้ฟีเจอร์เหล่านั้นในอุปกรณ์ที่ไม่ใช่ทีวี
<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"/>
หมายเหตุ: ฟีเจอร์บางอย่างจะมีฟีเจอร์ย่อย เช่น android.hardware.camera.front
ตามที่อธิบายไว้ใน
ข้อมูลอ้างอิงฟีเจอร์ อย่าลืมทำเครื่องหมายฟีเจอร์ย่อยใดๆ ก็ตามที่ใช้ในแอปเป็น required="false"
ด้วย
แอปทั้งหมดที่มีไว้สำหรับใช้ในอุปกรณ์ทีวีต้องประกาศว่าไม่จำเป็นต้องใช้ฟีเจอร์หน้าจอสัมผัส
ตามที่อธิบายไว้ในเริ่มต้นใช้งาน
แอปทีวี หากปกติแล้วแอปของคุณใช้ฟีเจอร์อย่างน้อย 1 รายการที่อุปกรณ์ทีวีไม่รองรับ ให้เปลี่ยน
การตั้งค่าแอตทริบิวต์ของ android:required
เป็น false
สำหรับฟีเจอร์เหล่านั้นในไฟล์ Manifest
ข้อควรระวัง: การประกาศฟีเจอร์ของฮาร์ดแวร์ตามที่จำเป็นโดยการตั้งค่า
ค่าเป็น true
จะทำให้ไม่สามารถติดตั้งแอปของคุณในทีวีได้
หรือปรากฏใน Launcher บนหน้าจอหลักของ Android TV
ตระหนักถึงสิทธิ์ที่บอกเป็นนัยถึงฟีเจอร์ของฮาร์ดแวร์
ประมาณ uses-permission
การประกาศไฟล์ Manifest หมายถึงฟีเจอร์ฮาร์ดแวร์ ซึ่งหมายความว่าการขอ
สิทธิ์ในไฟล์ Manifest ของแอปอาจยกเว้นไม่ให้มีการติดตั้งและใช้แอปบนทีวี
อุปกรณ์ สิทธิ์ที่ขอกันโดยทั่วไปซึ่งสร้างฟีเจอร์ของฮาร์ดแวร์โดยนัย
ข้อกำหนด
สิทธิ์ | ฟีเจอร์ฮาร์ดแวร์โดยนัย |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera และ android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
อุปกรณ์ทีวีบางรุ่นมีการเชื่อมต่ออีเทอร์เน็ตเท่านั้น |
ดูรายการคำขอสิทธิ์ทั้งหมดที่บอกเป็นนัยถึงข้อกำหนดคุณลักษณะของฮาร์ดแวร์ได้ที่
uses-feature
หากแอปขอฟีเจอร์ใดฟีเจอร์หนึ่งที่แสดงอยู่ก่อนหน้านี้ ให้ใส่
uses-feature
ในไฟล์ Manifest ของคุณสำหรับคุณลักษณะของฮาร์ดแวร์โดยนัยที่ระบุว่าไม่ใช่คุณลักษณะดังกล่าว
ต้องระบุ android:required="false"
หมายเหตุ: หากแอปกำหนดเป้าหมายเป็น Android 5.0 (API ระดับ 21) หรือ
สูงกว่าและใช้ ACCESS_COARSE_LOCATION
หรือ
สิทธิ์ ACCESS_FINE_LOCATION
ผู้ใช้ยังคงติดตั้ง
บนอุปกรณ์ทีวี แม้ว่าอุปกรณ์ทีวีจะไม่มีการ์ดเครือข่ายหรือ GPS
รีซีฟเวอร์
หลังจากกำหนดให้ฟีเจอร์ฮาร์ดแวร์เป็นตัวเลือกเพิ่มเติมสำหรับแอปแล้ว คุณต้องตรวจหา ของฟีเจอร์เหล่านั้นในระหว่างรันไทม์ แล้วจึงปรับลักษณะการทำงานของแอป ส่วนถัดไป กล่าวถึงวิธีตรวจสอบฟีเจอร์ของฮาร์ดแวร์และแนะนำแนวทางในการเปลี่ยนแปลง การทำงานของแอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกรองและการประกาศฟีเจอร์ในไฟล์ Manifest ได้ที่
uses-feature
ตรวจสอบฟีเจอร์ของฮาร์ดแวร์
เฟรมเวิร์ก Android จะบอกคุณได้หากฟีเจอร์ของฮาร์ดแวร์ไม่พร้อมใช้งานในอุปกรณ์ที่
ที่แอปของคุณกำลังทำงาน ใช้ hasSystemFeature(String)
ในการตรวจสอบฟีเจอร์เฉพาะ
ขณะรันไทม์ เมธอดนี้ใช้อาร์กิวเมนต์สตริงเดี่ยวที่
ระบุฟีเจอร์ที่คุณต้องการตรวจสอบ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตรวจหาความพร้อมใช้งานของฟีเจอร์ฮาร์ดแวร์ ที่รันไทม์:
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."); }
หน้าจอสัมผัส
เนื่องจากทีวีส่วนใหญ่ไม่มีหน้าจอสัมผัส Android จึงไม่สนับสนุนการโต้ตอบกับหน้าจอสัมผัสสำหรับ อุปกรณ์ทีวี นอกจากนี้ การใช้หน้าจอสัมผัส ไม่สอดคล้องกับสภาพแวดล้อมการรับชม ผู้ใช้นั่งห่างจากจอแสดงผล 10 ฟุต ตรวจสอบว่าองค์ประกอบ UI และข้อความไม่แสดง จำเป็นต้องใช้หรือบอกเป็นนัยถึงการใช้หน้าจอสัมผัส
สำหรับอุปกรณ์ทีวี ให้ออกแบบแอปให้รองรับ การนำทางโดยใช้ปุ่มบังคับทิศทาง (D-pad) บนรีโมตคอนโทรลทีวี สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ ที่รองรับการนำทางอย่างเหมาะสมโดยใช้การควบคุมที่เหมาะกับทีวี โปรดดู การนำทางในทีวี
กล้อง
แม้ว่าทีวีมักจะไม่มีกล้อง แต่คุณก็สามารถให้ภาพที่เกี่ยวกับการถ่ายภาพได้ บนทีวี ตัวอย่างเช่น หากมีแอปที่ถ่ายภาพ ดู และแก้ไขรูปภาพ คุณสามารถ ปิดฟังก์ชันการถ่ายภาพสำหรับทีวีและยังให้ผู้ใช้ดูและแก้ไขได้ รูปภาพ หากคุณตัดสินใจอนุญาตให้แอปที่เกี่ยวข้องกับกล้องทำงานบนทีวี ให้เพิ่ม การประกาศฟีเจอร์ต่อไปนี้สำหรับไฟล์ Manifest ของแอป
<uses-feature android:name="android.hardware.camera" android:required="false" />
หากอนุญาตให้แอปทำงานโดยไม่ใช้กล้อง ให้เพิ่มโค้ดลงในแอป ซึ่งจะตรวจจับว่าคุณลักษณะของกล้องพร้อมใช้งานหรือไม่ และปรับการทำงาน แอป ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตรวจหาว่ากล้องมีกล้องอยู่
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
ทีวีเป็นแบบอยู่กับที่ อุปกรณ์ในอาคาร และไม่มีระบบกำหนดตำแหน่งบนพื้นโลก (GPS) ในตัว รีซีฟเวอร์ หากแอปของคุณใช้ข้อมูลตําแหน่ง คุณจะยังคงให้ผู้ใช้ค้นหาได้ สถานที่ตั้งหรือใช้ผู้ให้บริการสถานที่ตั้งแบบคงที่ เช่น รหัสไปรษณีย์ที่กำหนดค่าไว้ระหว่างการใช้อุปกรณ์ทีวี การตั้งค่า
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); }
หยุดเล่นชั่วคราวในโหมดใช้พลังงานต่ำ
อุปกรณ์ทีวีบางรุ่นรองรับโหมดพลังงานต่ำเมื่อผู้ใช้ปิดอุปกรณ์ อุปกรณ์จะปิดใช้จอแสดงผลและคง Android ไว้แทนการปิดเครื่อง ทีวีทำงานอยู่เบื้องหลัง เอาต์พุตเสียงยังคงเปิดใช้งานในโหมดนี้ ดังนั้น หยุดเนื้อหาที่เล่นอยู่ในปัจจุบันเมื่ออุปกรณ์อยู่ในโหมดพลังงานต่ำ
หากต้องการหลีกเลี่ยงการเล่นในโหมดใช้พลังงานต่ำ ให้ลบล้าง
onStop()
และหยุดเนื้อหาที่เล่นอยู่ในปัจจุบัน
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(); }
เมื่อผู้ใช้เปิดแหล่งจ่ายไฟอีกครั้ง ระบบจะเรียก onStart()
หากแอปเป็นแอปที่ทำงานอยู่เบื้องหน้า ดูข้อมูลเพิ่มเติมเกี่ยวกับการเริ่มต้นและการหยุด
กิจกรรม โปรดดู
วงจรกิจกรรม