轉載請把頭部出處連接和尾部二維碼一塊兒轉載,本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/52792562css
前言:近年來,智能電視的發展如火如荼,Googel 也在大力推動TV及穿帶設備的發展,在互聯網的風口,是豬也會飛,這句話並非沒有道理的。傳統電視機廠商,基本都轉型致力於智能電視的相關業務。android
電視硬件是大大不一樣於其餘Android設備。電視不包括其餘Android設備上發現的一些硬件特性,如觸屏,攝像頭,GPS接收器。電視也徹底依靠輔助硬件設備。爲了讓用戶與電視應用程序交互,他們必須使用一個遙控器或遊戲手柄。當你爲電視構建一個應用程序,你必須仔細考慮硬件操做電視硬件的限制和要求。web
若是您正在構建一個app運行在TV設備和其餘設備,你也許須要去check你的app運行在什麼樣的設備上且可能將在你的app作何種操做。
例如,若是您有一個app被Intent啓動,你的應用應當被檢查設備屬性去肯定是否能啓動在TV下的activity或者是在手機上的activity.微信
推薦一種方法來肯定你的app是否運行在一個TV設備下,
經過使用UiModeManager.getCurrentModeType()方法來檢查該設備是否在TV模式下運行。
下面的示例代碼顯示瞭如何檢查你的應用程序是否運行在一個TV設備:markdown
根據應用程序的設計和功能,你能夠解決某些硬件功能不可用。瞭解什麼硬件特性一般不用於電視,如何檢測丟失的硬件特性,並建議使用這些特性。app
電視相比其餘設備有着不一樣的做用,因此它們沒有其餘android設備一般有的一些硬件特性。出於這個緣由,Android系統不支持電視設備有如下特色:框架
Hardware | Android feature descriptor |
---|---|
Touchscreen | android.hardware.touchscreen |
Touchscreen emulator | android.hardware.faketouch |
Telephony | android.hardware.telephony |
Camera | android.hardware.camera |
Near Field Communications (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Microphone [1] | android.hardware.microphone |
Sensors | android.hardware.sensor |
Screen in portrait orientation | android.hardware.screen.portrait |
一些電視控制器有一個麥克風,麥克風不同的硬件功能描述。控制器麥克風徹底支持。svg
Android應用程序能夠聲明硬件功能要求在app中Manifest,以確保他們不被安裝在此app下,設備不提供這些功能。若是你是擴展示有應用程序使用在電視上,仔細檢查你的應用程序的清單,由於任何硬件requirements聲明可能阻止它被安裝在一個TV設備上。源碼分析
若是您的應用程序使用硬件特性(如觸摸屏或相機),不可用在TV上,但能夠不使用這些功能,修改你的應用程序的清單,代表這些特性被應用程序不須要。如下清單代碼片斷演示瞭如何聲明應用程序不須要硬件特性不可用在電視設備,即便沒有電視設備上的應用程序可使用這些功能:ui
一些features像android.hardware.camera subfeatures.front,在feature引導時,確保標識required=」false」 在任何子features中,由於也許會使用在app中
全部應用在電視上使用,app必須聲明中描述的觸摸屏功能不須要使用。若是您的應用程序一般使用上面列出的一個或多個特性,在你的清單文件中,改變這些features像android:required attribute setting爲false,
警告:聲明一個hardware 的feature可經過設置一些屬性值爲true,避免你的app能安裝在TV 設備或出如今Android TV的launcher啓動頁上
一旦你決定讓你的硬件特性可選應用程序,您必須在運行時檢查這些功能的可用性,而後調整你的應用程序的行爲。
一些uses-permission清單聲明意味着硬件特性。這種行爲意味着請求一些應用程序權限清單能夠包含你的app從TV設備上安裝和使用。下面的通常要求權限建立隱式硬件功能要求:
Permission | Implied hardware feature |
---|---|
RECORD_AUDIO | android.hardware.microphone |
CAMERA | android.hardware.camera and android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION | android.hardware.location android.hardware.location.network (Target API level 20 or lower only.) |
ACCESS_FINE_LOCATION | android.hardware.location android.hardware.location.gps (Target API level 20 or lower only.) |
完整的許可列表請求,意味着硬件功能要求,看到uses-feature指南。若是你的應用程序請求上面列出的特性之一,uses-feature聲明包含在您的清單隱含的硬件功能,代表它不是必需的(android:required=「false」)。
注意:若是你的目標app運行Android 5.0(API級別21)或更高版本,並使用ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION權限,用戶仍然能夠安裝你的應用電視設備,即便電視設備沒有網卡或GPS接收器。
Android框架能夠告訴你若是沒有可用的硬件特性在設備上,應用程序正在運行。使用hasSystemFeature(String)方法在運行時檢查特定的功能。該方法接受一個字符串參數,指定您想要的功能檢查。
下面的代碼示例演示瞭如何在運行時檢測硬件features的可用性:
Touch screen
因大多數電視沒有觸摸屏,Android不支持觸屏交互電視設備。此外,使用一個觸摸屏不符合觀看環境中用戶坐在遠離顯示10英尺。確保你的UI元素和文本不須要或暗示觸摸屏的使用。
電視上的設備,你應該設計你的應用程序使用這個交互模型經過支持導航用定向杆(方向鍵)在一個電視遙控器。
Camera
雖然電視一般沒有相機,你仍然能夠提供一個photography-related電視應用。例如,若是您有一個應用程序須要,視圖和編輯照片,您能夠禁用它的拍照功能電視甚至還容許用戶查看和編輯照片。若是你決定讓camera-related應用在電視工做,添加如下功能聲明應用程序清單:
若是你沒有攝像頭,使應用程序的運行代碼添加到您的應用程序,檢測若是相機功能可用,使調整應用程序的操做。下面的代碼示例演示瞭如何檢測相機的存在:
GPS
TV是靜止的,室內設備,沒有內置的全球定位系統(GPS)接收器。若是您的應用程序使用位置信息,您仍然能夠容許用戶搜索一個位置,或使用一個靜態位置提供者如郵政編碼在電視設備的配置設置。
Handling Controllers
TV設備須要輔助硬件設備與應用程序進行交互,一個基本形式的遠程控制器或遊戲控制器。這意味着您的應用程序必須支持方向鍵輸入。這也意味着意味着你的app須要處控制器離線和外置設備(如鍵盤)輸入,而不是一種類型的控制器(普通遙控器)。
方向鍵最低控制
電視設備的默認控制器是一個方向鍵。通常來講,應用程序應該是可操做的,只有從一個遠程控制器,下,左,右,選擇,和home鍵。若是你的應用是一種遊戲,一般須要與額外的遊戲控制器控制,應用程序應該試圖讓遊戲與這些方向鍵控制。在這種狀況下,應用程序也應該提醒用戶須要一個控制器和容許他們使用方向鍵控制器優雅地退出你的遊戲。
TV上控制器可能會斷開,如藍牙設備可能會爲省電而有周期性的進入睡眠模式或從TV設備上斷開。這意味着應用程序可能被中斷或重啓若是沒有配置爲處理這些鏈接事件。這些事件能夠發生在有下列情形之一的:
任何TV上的app中activity 是以斷開和重鏈接事件爲條件的,必須配置去處理重鏈接事件在app中Mainfest文件中,下面的代碼示例演示瞭如何啓用一個Activity來處理配置的變化,包括鍵盤或導航設備鏈接,斷開,或從新鏈接:
第一時間得到博客更新提醒,以及更多android乾貨,源碼分析,歡迎關注個人微信公衆號,掃一掃下方二維碼或者長按識別二維碼,便可關注。