標籤:
轉載請把頭部出處連結和尾部二維碼一起轉載,本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/52792562
前言:近年來,智能電視的發展如火如荼,Googel 也在大力推進TV及穿帶裝置的發展,在互連網的風口,是豬也會飛,這句話並不是沒有道理的。傳統電視機廠商,基本都轉型致力於智能電視的相關業務。
- 處理電視硬體
- app上檢查電視裝置
- 處理不支援的硬體features
- Declaring hardware requirements for TV
- 聲明許可權意味著硬體要具有該特性
- 檢查硬體Features
- 處理控制器斷開情境
處理電視硬體
電視硬體是大大不同於其他Android裝置。電視不包括其他Android裝置上發現的一些硬體特性,如觸屏,網路攝影機,GPS接收器。電視也完全依靠輔助硬體裝置。為了讓使用者與電視應用程式互動,他們必須使用一個遙控器或遊戲手柄。當你為電視構建一個應用程式,你必須仔細考慮硬體操作電視硬體的限制和要求。
app上檢查電視裝置
如果您正在構建一個app運行在TV裝置和其他裝置,你也許需要去check你的app運行在什麼樣的裝置上且可能將在你的app做何種操作。
例如,如果您有一個app被Intent啟動,你的應用應當被檢查裝置屬性去確定是否能啟動在TV下的activity或者是在手機上的activity.
推薦一種方法來確定你的app是否運行在一個TV裝置下,
通過使用UiModeManager.getCurrentModeType()方法來檢查該裝置是否在TV模式下運行。
下面的範例程式碼顯示了如何檢查你的應用程式是否運行在一個TV裝置:
處理不支援的硬體features
根據應用程式的設計和功能,你可以解決某些硬體功能不可用。瞭解什麼硬體特性通常不用於電視,如何檢測丟失的硬體特性,並建議使用這些特性。
電視相比其他裝置有著不同的作用,所以它們沒有其他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 |
一些電視控制器有一個麥克風,麥克風不一樣的硬體功能描述。控制器麥克風完全支援。
Declaring hardware requirements for TV
Android應用程式可以聲明硬體功能要求在app中Manifest,以確保他們不被安裝在此app下,裝置不提供這些功能。如果你是擴充現有應用程式使用在電視上,仔細檢查你的應用程式的清單,因為任何硬體requirements聲明可能阻止它被安裝在一個TV裝置上。
如果您的應用程式使用硬體特性(如觸控螢幕或相機),不可用在TV上,但可以不使用這些功能,修改你的應用程式的清單,表明這些特性被應用程式不需要。以下清單程式碼片段示範了如何聲明應用程式不需要硬體特性不可用在電視裝置,即使沒有電視裝置上的應用程式可以使用這些功能:
一些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接收器。
檢查硬體Features
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乾貨,源碼分析,歡迎關注我的公眾號,掃一掃下方二維碼或者長按識別二維碼,即可關注。
如果你覺得好,隨手點贊,也是對筆者的肯定,也可以分享此公眾號給你更多的人,原創不易
Android TV開發總結(一)構建一個TV app前要知道的事兒