พอดีวันที่ผ่านมาได้มีผู้ที่หลงเข้ามาถามเกี่ยวกับ Android TV เพราะอยากจะพัฒนาแอพบน Android TV ซึ่งเจ้าของบล็อกคิดว่าเป็นอีกหนึ่งเรื่องที่หลายๆคนอาจจะยังไม่รู้เกี่ยวกับมันนัก และเข้าใจผิดบางอย่าง
ดังนั้นเจ้าของบล็อกจึงขอเขียนเป็นเกร็ดความรู้ในแบบฉบับที่นักพัฒนาควรจะรู้จักกันนะครับ
Android TV คืออะไร ต่างจาก Android ปกติอย่างไร?
ถ้าจะให้ตอบในมุมมองของ User ทั่วๆไปก็คงต้องบอกว่ามันก็เป็น Android OS นั่นแหละ แต่ทำออกมาเพื่อใช้งานบน TV โดยเฉพาะ ซึ่งมีทั้งรูปแบบที่เป็น TV ที่เป็น Android มาให้ในตัวเลย และก็มีแบบเป็นกล่อง Set Top Box ที่เอาไปเสียบกับทีวีเครื่องไหนก็ได้ที่รองรับจะได้ไม่ต้องไปซื้อ TV ใหม่
แล้วในมุมมองของนักพัฒนาล่ะ?
เจ้าของบล็อกเชื่อว่าน่าจะมีนักพัฒนาแอนดรอยด์หลายๆคนยังไม่รู้ว่า ถ้าจะเขียนแอพลง Android TV มันจะแตกต่างกับที่เขียนบน Phone หรือ Tablet หรือป่าว ต้องเขียนแยกอีกตัวเลยมั้ย
แต่ก่อนอื่นอยากให้รู้เบื้องหลังของ Android TV ที่เห็นกันอยู่ในตลาดทุกวันนี้ก่อนนะ
เบื้องหลังของ Android TV นั้นมีอยู่ 2 แบบด้วยกัน
ผู้ที่หลงเข้ามาอ่านอาจจะเคยได้ยินกันบ้างเนอะว่า Google เคยเปิดตัว Android TV ไปในงาน Google I/O เมื่อก่อน โดยเปิดตัวบน Nexus Player เป็นครั้งแรก
แต่ทว่าก่อนที่ Google จะเปิดตัว Nexus Player และ Android TV นั้น ในตลาดทั่วโลกได้มี Android TV วางขายกันมาพักใหญ่ๆแล้ว ซึ่งนั่นล่ะครับจุดสำคัญของความแตกต่างกันระหว่าง Android TV ทำให้มีอยู่ 2 แบบด้วยกัน
ดังนั้นเจ้าของบล็อกขอแบ่งชื่อเรียกแบบนี้
- Android TV แบบ Official จาก Google ที่ทำขึ้นมา
- Android TV แบบ Unofficial ที่เอา ROM ที่มีอยู่แล้วมา Modify ให้ใช้สำหรับ TV
Android TV แบบ Official (Leanback)
จริงๆ Google ก็ไม่ได้พึ่งจะทำ Android TV เป็นครั้งแรกหรอก แต่ก่อนหน้านี้ทำเป็น Google TV ครับ แต่ไม่ค่อยรุ่งซักเท่าไร แต่เมื่อเข้าสู่ยุคของ Android 5.0 Lollipop ก็ได้จับ Android มาเป็น Platform หลักสำหรับอุปกรณ์ต่างๆนอกจาก Phone และ Tablet จึงทำให้ตอนนั้นถือกำเนิด Android Wear (สำหรับ Smartwatch), Android Auto (สำหรับรถยนต์) และ Android TV (สำหรับ TV) นั่นเอง
ซึ่งในการใช้งานบน TV นั้นเรียกได้ว่าแตกต่างกับ Phone หรือ Tablet อยู่แล้วเนอะ เพราะ TV พกพาไม่ได้ คนใช้ก็ไม่ได้แตะที่หน้าจอ TV แต่จะกดที่รีโมตแทน (ไอ้รีโมตที่ชอบหาไม่เจอเวลาอยากจะเปลี่ยนช่องนั่นแหละ) และอื่นๆอีกหลายๆอย่าง
จึงทำให้ Google ออกแบบ Android TV ให้ใช้งานต่างจาก Android เดิมๆ มีหน้าหลักแบบใหม่ที่สามารถใช้รีโมตหรือจอยเกมควบคุมได้ง่าย การเลือกเมนูต่างๆภายในแอพก็ต้องออกแบบมาให้รองรับเช่นกัน (แต่ก็รองรับเม้าส์กับคีย์บอร์ดอยู่นะ)
ดังนั้นถ้าพูดแบบโดยรวมก็คือ UX และ UI ของ Android TV นั้นจะแตกต่างกับ Android เดิมโดยสิ้นเชิงครับ และมีชื่อเล่นๆที่ใช้เรียกกันว่า Leanback ไม่ต้องแปลกใจถ้าเจอคำสั่งที่เป็นคำนี้ มันเป็นคำสั่งสำหรับ Android TV นั่นเอง
อุปกรณ์ที่เป็น Android TV แบบนี้ในตอนนี้ก็จะมี Nexus Player, Nvidia Shield, Razor Forge TV, Sony Android TV, Sharp Android TV และ Phillips Android TV หรือดูได้ที่ https://www.android.com/tv/
Android TV แบบ Unofficial
Android TV แบบนี้เกิดขึ้นก่อนที่ Google จะเปิดตัว Android TV นานพอสมควร ทำกันมาตั้งแต่สมัย Android 4.0 Icecream Sandwich แล้วล่ะ เพราะมีผู้พัฒนาที่เกิดไอเดียอยากจะให้ Android ที่ใช้ๆกันไปเปิดบน TV แทน จึงได้ทำออกมาในรูปของ Set Top Box หรือ Stick เพื่อต่อกับ TV ได้เลย ทั้งนี้เพื่อให้สามารถนำไปติดตั้ง TV ที่มีอยู่ได้เลยโดยไม่ต้องซื้อใหม่
แต่ก็มีบางเจ้าถึงกับ Built-in มาในตัว TV เลยเหมือนกันนะ อย่างเช่น Toshiba กับ Xiaomi นั่นเอง
บ้างก็อาจจะสงสัย บ้างก็อาจจะรู้กันบ้างแล้วว่า แล้ว OS ข้างใน Android TV แบบนี้มันต่างกับแบบ Official ยังไงล่ะ?
ผู้ผลิตเค้าจะเอา ROM ที่ Based on Android Tablet มาใช้ในการ Modify เพื่อให้มันออกมาใช้งานกับ TV ได้นั่นเอง ทั้งในเรื่องของ Hardware และ Software บ้างก็มีการปรับในเรื่องของ Hardware เพิ่ม เพื่อให้ใช้งานกับ TV ได้สะดวกขึ้น เช่นมีช่อง AV Out สำหรับทีวีเก่าๆ มี Pointer Remote เพื่อใช้เลือกเมนูต่างๆ บ้างก็ใช้วิธีต่อ Mouse กับ Keyboard (อย่างของ Mi TV ก็มี Smart Remote โดยเฉพาะเลย) หรือผู้ผลิตบางเจ้าก็ใช้ KODI (หรือที่รู้จักกันในชื่อ XBMC) ซึ่งเป็นแอพสำหรับ Media Entertainment มาครอบทับอีกที แล้วใช้งานผ่านแอพตัวนี้เป็นหลักแทน
การพัฒนาแอพบน Android TV
เมื่อทั้งสองแบบนั้นต่างกันในเรื่องของ ROM (ROM ที่เป็น Android TV Platform จริงๆ กับ ROM จากการเอา ROM ของ Android Tablet มา Modify) ดังนั้นในฝั่งของนักพัฒนานั้นบอกเลยว่าแตกต่างกันแน่ๆ
สำหรับ Android TV แบบ Unofficial นั้นจะอิงมาจาก Android Tablet เป็นหลัก ดังนั้นถ้าแอพของผู้ที่หลงเข้ามาอ่านรองรับการใช้งานบน Tablet อยู่แล้ว ก็สามารถรองรับกับ Android TV แบบ Unofficial ได้เลย แทบจะไม่ต้องปรับอะไรเลย เว้นแต่ว่าอาจจะใช้งาน Hardware อย่างพวกกล้องไม่ได้ เพราะไม่มีให้ใช้ (ปกติก็ต้องเขียนเผื่อเครื่องไม่มีให้ใช้อยู่แล้วนี่เนอะ) ก็ควรลองนั่งเช็คดูก่อนนะ
แต่สำหรับ Android TV แบบ Official นั้นอาจจะต้องทำแยกกับตัวแอพปกติก็ว่าได้ เพราะว่าในแง่ UI และ UX ของ Android TV นั้นจะแตกต่างกับ Android ปกติอยู่แล้ว ยกตัวอย่างเช่นแอพ YouTube ในบนฝั่ง Phone และ TV ที่เรียกได้ว่าแตกต่างกันมากทั้งหน้าตาและการควบคุมใช้งาน
แต่ก็ไม่ได้หมายความว่าจะต้องทำแอพแยกเสมอไปนะ ถ้าอยากจะให้แอพตัวเดียวรองรับ Android TV ด้วยก็ทำได้เช่นกัน
คำสั่งสำหรับ Leanback เบื้องต้นที่นักพัฒนาควรรู้
ในกรณีของ Unofficial คงไม่ต้องสนใจอะไร เพราะแค่ทำให้รองรับกับ Tablet ก็ใช้งานได้แล้ว แต่ในกรณีที่เป็น Android TV แบบ Official หรือ Leanback (ต่อไปขอเรียกว่า Leanback นะ) เพื่อให้แยกได้ง่าย ทาง Google จึงกำหนดเป็น Feature ลงไปในอุปกรณ์แอนดรอยด์เลยว่าเป็น Leanback หรือไม่
ดังนั้นจึงสามารถเช็คผ่านโค้ดได้เหมือนกับเช็คว่าแอพใช้งานกล้องได้หรือไม่
val context: Context = /* ... */
val packageManager: PackageManager = context.packageManager
val isLeanBack: Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
ถ้าอยากให้แอพรองรับเฉพาะ Leanback ก็กำหนดผ่าน <uses-feature>
ได้เลย
<!-- AndroidManifest.xml -->
<manifest>
<uses-feature
android:name="android.software.leanback"
android:required="true" />
<!-- ... -->
</manifest>
และหน้าแรกของ Android TV นั้นไม่ใช่ Home Screen เหมือนของเดิม รวมไปถึงสามารถกำหนด Default Activity แยกสำหรับ Android TV ได้อีกด้วย สามารถดูรายละเอียดเพิ่มเติมได้ที่ Get Started with TV Apps [Android Developer]
และสำหรับการ Design สามารถดูได้ที่ Designing for Android TV [Android Developer]
Focused State ใน Selector ที่ชอบมองข้ามกัน
นักพัฒนาคงรู้จักกับ Selector อยู่แล้วเนอะ แล้วก็จะรู้กันว่านอกจาก Pressed และ Enabled ที่คุ้นเคยกันแล้ว ยังมี Focused อยู่ด้วย แต่มักจะมองข้ามกันไปเพราะว่าเวลาใช้งานบน Phone หรือ Tablet นั้นมันไม่ค่อยมีสถานะ Focused ให้เห็น เพราะเวลาในนิ้วแตะบนหน้าจอมันจะเห็นแค่ Pressed จึงทำให้นักพัฒนาส่วนใหญ่ไม่ทำ Selector ให้รองรับกับ Focused State ด้วย เพราะเสียเวลา
แต่สำหรับ Android TV นั้น การเพิ่ม Focused State ถือว่าเป็นเรื่องสำคัญมาก ยกตัวอย่างเช่นแอพ TED ที่มีหน้าต่างสามารถเลือกเรื่องที่ต้องการดูได้ และจะมีกรอบสีขาวๆแสดงให้เห็นว่ากำลังเลือกไปที่วีดีโอตัวไหนอยู่ (Focused State) โดยที่ยังไม่ได้กดเลือกดูวีดีโอนั้นๆ
ซึ่งถ้านักพัฒนาไม่ได้ทำ Selector ให้มี Focused State เวลาใช้งานบน Android TV ก็จะไม่รู้ว่าเลือกเมนูหรือปุ่มไหนอยู่ เพราะมันจะแสดงสถานะปกติให้เห็นตลอดเวลา ดังนั้นอย่ามองข้ามตรงจุดนี้ไปนะเออ
สรุป
สำหรับ Android TV ถือว่าเป็นเรื่องที่หาข้อมูลได้ยากพอสมควรสำหรับนักพัฒนาที่สนใจอยากจะลองทำดู แต่ก็ควรรู้ก่อนว่าเครื่องที่ใช้อยู่นั้นมันเป็นแบบไหนกันแน่ เพราะเจ้าของบล็อกเชื่อว่านักพัฒนาหลายๆคนยังไม่รู้ว่าจริงๆแล้ว Android TV ที่มีขายอยู่ทุกวันนี้มันมีอยู่สองแบบ (บ้างเข้าใจว่าของตัวเองเป็น Android TV Official ทั้งๆที่จริงๆแล้วเป็น Unofficial)
ถ้าเป็น Android TV แบบ Unofficial ก็ให้คิดซะว่ามันคือ Android Tablet ไปเลย แต่ถ้าเป็นแบบ Official หรือ Leanback ก็ให้ Follow ตาม Documentation ที่อยู่ใน Android Developer แทนนะครับ เพราะมันจะแตกต่างไปจากแอพแอนดรอยด์ที่เขียนกันอยู่ทุกวันนี้
ขอให้สนุกสนานกับการเขียนแอพบน Android TV ครับ