版權聲明:html
本帳號發佈文章均來自公衆號,承香墨影(cxmyDev),版權歸承香墨影全部。android
未經容許,不得轉載。微信
如今 Android 智能電視出貨量已經很是的大了,近兩年產的電視,基本上都屬於智能電視,而很大一部分都是搭載的 Android 系統。ide
固然,除了智能電視以外,還有一些智能盒子,例如:小米盒子、天貓魔盒等,其實最終都是 Android 系統。佈局
在國內的環境下,開發的 TV App 其實也並非遵循的 Google TV 的開發規範,而都是當成一個普通的 Android App 來開發的。在這個過程當中,其實是須要處理一些手機和電視的差別的,例如:焦點、選中狀態、屏幕適配等等,這些有時間再細說。ui
若是,屏幕適配作的好的話,其實是能夠無縫在手機設備上,運行一個本來爲了 Android TV 而開發的 App。設計
而有些場景下,爲了節約開發成本,有可能須要對一些在電視上運行的 App 作一個手機端的適配,最多見的場景,一個微信登陸的功能,TV App 作的通常是提供一個二維碼,讓手機掃碼登陸,可是當這個程序運行在手機端的時候,就可能須要一個按鈕,點擊調起微信去登陸了。3d
那麼,如何在同一個 App 內,區分當前運行在手機設備上,仍是電視設備上,就尤其重要了。code
既然要對運行環境作一個區分,那麼就須要考慮到,手機和電視的一些差別。cdn
手機和電視的差別性:
手機和電視的屏幕物理尺寸是徹底不同的,可是咱們也不能徹底使用買電視的時候介紹的 Xx寸 來區分屏幕物理尺寸。實際上徹底能夠將 Android 電視當成一個大平板。
這裏以一個電視英寸數的計算公式,計算屏幕對角線的長度,來作一個參考的數值。
既然屏幕的尺寸有差別,那麼從不一樣的佈局中獲取佈局文件也是不同的,能夠經過 screenLayout 參數來區分出當前命中那一套。
規則以下:
截圖來自官方文檔,有興趣的能夠通篇閱讀一下。
developer.android.com/guide/pract…
而代碼以下:
對於電視而言,就如今所瞭解到的,尚未一款智能電視或者智能盒子,是能夠插 SIM 卡的,因此判斷 SIM 支持的模式,基本上就能夠區分出電視仍是手機了。
SIM 卡支持的模式可使用 TelephonyManager 來獲取當前的狀態。
getPhoneType()
能夠獲取當前設備支持的 Radio 的模式。
對於電視的電源,有什麼特色?
獲取當前電源和充電的接入方式,沒什麼好說的,基本上依據這兩個條件,就能夠區分出當前究竟是電視仍是手機/平板了。
這裏提供的幾點方法,其實都是猜想,都是有缺陷的。例如可能出現某些廠商的奇葩設備,出貨屏幕尺寸就是大的手機,或者有一些奇葩的電視或者盒子,就是能夠支持插 SIM 卡,再或者有其實還有一些智能投影的設備,實際上是內帶電池的,是有電量的消耗的。
因此最穩妥的方式,就是組合起來判斷。