Android Studio V3.12環(huán)境下TV開(kāi)發(fā)教程(一)處理電視硬件

Android Studio V3.12環(huán)境下TV開(kāi)發(fā)教程

(轉(zhuǎn)自Android官網(wǎng)https://developer.android.com/training/tv/start)

文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80618260

處理電視硬件

電視硬件與其他Android設(shè)備有很大不同棍厂。?電視不包括其他Android設(shè)備上的某些硬件功能进苍,例如觸摸屏瓢剿,相機(jī)和GPS接收器缆镣。?電視也完全依賴(lài)輔助硬件設(shè)備戚扳。?為了讓用戶(hù)與電視應(yīng)用程序交互蝌箍,他們必須使用遙控器或游戲手柄。?當(dāng)您構(gòu)建電視應(yīng)用程序時(shí)牺汤,您必須仔細(xì)考慮在硬件上運(yùn)行的硬件限制和要求辽旋。

本課程介紹如何檢查您的應(yīng)用是否在電視上運(yùn)行,以及如何處理不支持的硬件功能。?要了解各種輸入方法补胚,請(qǐng)參閱管理電視控制器?码耐。

檢查電視設(shè)備

如果您正在構(gòu)建可在電視設(shè)備和其他設(shè)備上運(yùn)行的應(yīng)用程序,則可能需要檢查您的應(yīng)用程序正在運(yùn)行的設(shè)備類(lèi)型溶其,并調(diào)整應(yīng)用程序的操作骚腥。?例如,如果您的應(yīng)用程序可以通過(guò)Intent啟動(dòng)瓶逃,則應(yīng)用程序應(yīng)檢查設(shè)備屬性以確定它是否應(yīng)啟動(dòng)面向電視的活動(dòng)或電話活動(dòng)束铭。

確定您的應(yīng)用是否在電視設(shè)備上運(yùn)行的推薦方法是使用UiModeManager.getCurrentModeType()方法檢查設(shè)備是否在電視模式下運(yùn)行。?以下示例代碼顯示了如何檢查您的應(yīng)用是否在電視設(shè)備上運(yùn)行:

public static final String TAG = "DeviceTypeRuntimeCheck";UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {? ? Log.d(TAG, "Running on a TV Device");} else {? ? Log.d(TAG, "Running on a non-TV Device");}

處理不支持的硬件功能

根據(jù)您的應(yīng)用程序的設(shè)計(jì)和功能厢绝,您可能能夠解決某些不可用的硬件功能契沫。?本節(jié)討論電視通常無(wú)法使用哪些硬件功能,如何檢測(cè)缺失的硬件功能代芜,并建議使用這些功能的替代方案埠褪。

不支持的電視硬件功能

電視與其他設(shè)備具有不同的用途浓利,因此它們不具有其他Android設(shè)備經(jīng)常具有的硬件功能挤庇。?出于這個(gè)原因,Android系統(tǒng)不支持電視設(shè)備的以下功能:

硬件Android功能描述符

觸摸屏android.hardware.touchscreen

觸摸屏模擬器android.hardware.faketouch

電話android.hardware.telephony

相機(jī)android.hardware.camera

近場(chǎng)通信(NFC)android.hardware.nfc

全球定位系統(tǒng)android.hardware.location.gps

麥克風(fēng)[1]android.hardware.microphone

傳感器android.hardware.sensor

屏幕縱向android.hardware.screen.portrait

[1]某些電視控制器有一個(gè)麥克風(fēng)贷掖,與此處所述的麥克風(fēng)硬件功能不同嫡秕。?控制器麥克風(fēng)完全支持。

有關(guān)功能苹威,子功能及其描述符的完整列表昆咽,請(qǐng)參閱功能參考?。

聲明電視的硬件要求

Android應(yīng)用程序可以在應(yīng)用程序清單中聲明硬件功能要求牙甫,以確保它們不會(huì)安裝在不提供這些功能的設(shè)備上掷酗。如果您要擴(kuò)展現(xiàn)有的應(yīng)用程序以便在電視上使用,請(qǐng)仔細(xì)查看應(yīng)用程序的清單窟哺,了解可能會(huì)阻止其安裝在電視設(shè)備上的任何硬件要求聲明泻轰。

如果您的應(yīng)用使用電視無(wú)法使用的硬件功能(如觸摸屏或相機(jī)),但可以在不使用這些功能的情況下進(jìn)行操作且轨,請(qǐng)修改應(yīng)用的清單以指示應(yīng)用不需要這些功能浮声。?以下清單代碼段演示了如何聲明您的應(yīng)用不需要電視設(shè)備上不可用的硬件功能,即使您的應(yīng)用可能會(huì)在非電視設(shè)備上使用這些功能:

注意:某些功能具有像android.hardware.camera.front這樣的子功能旋奢,如功能參考中所述?泳挥。?請(qǐng)務(wù)必將required="false"任何子功能標(biāo)記為required="false"并在您的應(yīng)用中使用。

所有打算在電視設(shè)備上使用的應(yīng)用程序必須聲明觸摸屏功能不是必需的至朗,如電視應(yīng)用程序入門(mén)中所述屉符。?如果您的應(yīng)用程序通常使用上面列出的一個(gè)或多個(gè)功能,請(qǐng)將您的清單中的這些功能的android:required屬性設(shè)置更改為false?。

警告:通過(guò)將硬件功能設(shè)置為true來(lái)聲明硬件功能可防止您的應(yīng)用安裝在電視設(shè)備上或出現(xiàn)在Android TV主屏幕啟動(dòng)器中筑煮。

一旦決定為您的應(yīng)用程序制定可選的硬件功能辛蚊,您必須在運(yùn)行時(shí)檢查這些功能的可用性,然后調(diào)整應(yīng)用程序的行為真仲。?下一節(jié)討論如何檢查硬件功能并提出一些改變應(yīng)用程序行為的方法袋马。

有關(guān)在清單中過(guò)濾和聲明uses-feature更多信息,請(qǐng)參閱uses-feature指南秸应。

聲明含有硬件功能的權(quán)限

某些uses-permission清單聲明意味著硬件功能?虑凛。?此行為意味著在您的應(yīng)用清單中請(qǐng)求某些權(quán)限可能會(huì)排除您的應(yīng)用在電視設(shè)備上的安裝和使用。?以下通常請(qǐng)求的權(quán)限會(huì)創(chuàng)建隱式硬件功能要求:

允許隱含的硬件功能

RECORD_AUDIOandroid.hardware.microphone

CAMERAandroid.hardware.camera

android.hardware.camera.autofocus

ACCESS_COARSE_LOCATIONandroid.hardware.location

android.hardware.location.network?(目標(biāo)API級(jí)別僅為20或更低)软啼。

ACCESS_FINE_LOCATIONandroid.hardware.location

android.hardware.location.gps?(僅限目標(biāo)API級(jí)別20或更低)桑谍。

有關(guān)暗示硬件功能要求的權(quán)限請(qǐng)求的完整列表,請(qǐng)參閱uses-feature指南祸挪。?如果您的應(yīng)用程序請(qǐng)求上面列出的功能之一锣披,請(qǐng)?jiān)谇鍐沃袨殡[含的硬件功能添加一個(gè)uses-feature聲明,以指示它不是必需的(?android:required="false"?)贿条。

注意:如果您的應(yīng)用面向Android 5.0(API級(jí)別21)或更高版本并使用ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION權(quán)限雹仿,則即使電視設(shè)備沒(méi)有網(wǎng)卡或GPS接收器,用戶(hù)仍然可以在電視設(shè)備上安裝您的應(yīng)用整以。

檢查硬件功能

Android框架可以告訴您硬件功能是否在您的應(yīng)用運(yùn)行的設(shè)備上不可用胧辽。?使用hasSystemFeature(String)方法在運(yùn)行時(shí)檢查特定功能。?該方法接受一個(gè)字符串參數(shù)公黑,用于指定要檢查的功能邑商。

以下代碼示例演示如何在運(yùn)行時(shí)檢測(cè)硬件功能的可用性:

// Check if the telephony hardware feature is available.if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {? ? Log.d("HardwareFeatureTest", "Device can make phone calls");}// Check if android.hardware.touchscreen feature is available.if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {? ? Log.d("HardwareFeatureTest", "Device has a touch screen.");}

觸摸屏

由于大多數(shù)電視沒(méi)有觸摸屏,Android不支持電視設(shè)備的觸摸屏交互凡蚜。?此外人断,使用觸摸屏與用戶(hù)坐在離顯示器10英尺遠(yuǎn)的觀看環(huán)境不一致。?確保您的UI元素和文本不需要或暗示使用觸摸屏朝蜘。

在電視設(shè)備上恶迈,您應(yīng)該設(shè)計(jì)自己的應(yīng)用程序,以便通過(guò)使用電視遙控器上的方向鍵盤(pán)(D-pad)支持導(dǎo)航來(lái)使用此交互模式芹务。?有關(guān)使用電視友好控件正確支持導(dǎo)航的更多信息蝉绷,請(qǐng)參閱創(chuàng)建電視導(dǎo)航?。

相機(jī)

盡管電視機(jī)通常沒(méi)有相機(jī)枣抱,但您仍然可以在電視機(jī)上提供與攝影相關(guān)的應(yīng)用程序熔吗。?例如,如果您的應(yīng)用需要拍攝佳晶,查看和編輯照片桅狠,則可以禁用其電視拍攝功能,并允許用戶(hù)查看甚至編輯照片。?如果您決定在電視上啟用與相機(jī)相關(guān)的應(yīng)用程序中跌,請(qǐng)?jiān)趹?yīng)用程序清單中添加以下功能聲明:

如果您的應(yīng)用在沒(méi)有攝像頭的情況下運(yùn)行咨堤,請(qǐng)將代碼添加到您的應(yīng)用中,以檢測(cè)攝像頭功能是否可用漩符,并對(duì)應(yīng)用的操作進(jìn)行調(diào)整一喘。?以下代碼示例演示如何檢測(cè)相機(jī)的存在:

// Check if 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.");}

全球定位系統(tǒng)

電視是固定的,室內(nèi)設(shè)備嗜暴,并且沒(méi)有內(nèi)置的全球定位系統(tǒng)(GPS)接收器凸克。?如果您的應(yīng)用使用位置信息,您仍然可以允許用戶(hù)搜索位置闷沥,或者使用靜態(tài)位置提供商萎战,例如在電視設(shè)備設(shè)置期間配置的郵政編碼。

// Request a static location from the location managerLocationManager locationManager = (LocationManager) this.getSystemService(? ? ? ? Context.LOCATION_SERVICE);Location location = locationManager.getLastKnownLocation("static");// Attempt to get postal or zip code from the static location objectGeocoder geocoder = new Geocoder(this);Address address = null;try {? address = geocoder.getFromLocation(location.getLatitude(),? ? ? ? ? location.getLongitude(), 1).get(0);? Log.d("Zip code", address.getPostalCode());} catch (IOException e) {? Log.e(TAG, "Geocoder error", e);}

在低功耗模式下暫停播放

某些電視設(shè)備在用戶(hù)關(guān)閉設(shè)備時(shí)支持低功耗模式舆逃。?該設(shè)備不會(huì)關(guān)機(jī)蚂维,而是禁用顯示屏,并使Android TV在后臺(tái)運(yùn)行路狮。?在此模式下虫啥,音頻輸出仍然處于啟用狀態(tài),因此您的應(yīng)用在設(shè)備處于低功耗模式時(shí)應(yīng)該停止任何正在播放的內(nèi)容览祖。

為避免在低功耗模式下播放孝鹊,請(qǐng)覆蓋onStop()并停止當(dāng)前正在播放的內(nèi)容:

@Overridepublic void onStop() {? // App-specific method to stop playback? stopPlayback();? super.onStop();}

當(dāng)用戶(hù)重新打開(kāi)電源時(shí)炊琉,如果您的應(yīng)用程序是活動(dòng)的前臺(tái)應(yīng)用程序展蒂,則會(huì)調(diào)用onStart()?。?有關(guān)啟動(dòng)和停止活動(dòng)的更多信息苔咪,請(qǐng)參閱活動(dòng)生命周期?锰悼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市团赏,隨后出現(xiàn)的幾起案子箕般,更是在濱河造成了極大的恐慌,老刑警劉巖舔清,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丝里,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡体谒,警方通過(guò)查閱死者的電腦和手機(jī)杯聚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抒痒,“玉大人幌绍,你說(shuō)我怎么就攤上這事。” “怎么了傀广?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵颁独,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伪冰,道長(zhǎng)誓酒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任贮聂,我火速辦了婚禮丰捷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寂汇。我一直安慰自己病往,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布骄瓣。 她就那樣靜靜地躺著停巷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榕栏。 梳的紋絲不亂的頭發(fā)上畔勤,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音扒磁,去河邊找鬼庆揪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妨托,可吹牛的內(nèi)容都是我干的缸榛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼兰伤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼内颗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起敦腔,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤均澳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后符衔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體找前,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年判族,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躺盛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡五嫂,死狀恐怖颗品,靈堂內(nèi)的尸體忽然破棺而出肯尺,到底是詐尸還是另有隱情,我是刑警寧澤躯枢,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布则吟,位于F島的核電站,受9級(jí)特大地震影響锄蹂,放射性物質(zhì)發(fā)生泄漏氓仲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一得糜、第九天 我趴在偏房一處隱蔽的房頂上張望敬扛。 院中可真熱鬧,春花似錦朝抖、人聲如沸啥箭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)急侥。三九已至,卻和暖如春侮邀,著一層夾襖步出監(jiān)牢的瞬間坏怪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工绊茧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铝宵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓华畏,卻偏偏與公主長(zhǎng)得像鹏秋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唯绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容