為 TV 開發的 App,你說要運行在手機上?
承香墨影
只分享最有用的原創技術乾貨!
關注
正文共: 2440字 2圖
預計閱讀時間: 9分鐘
一、前言
Android 智能電視,不知道你接觸過沒有?近兩年生產的電視,基本上都屬於智能電視,而因為 Android 的開放性,這些電視很大一部分都是搭載的 Android 系統。
而除了 Android 智能電視之外,還有一些智能盒子,例如:小米盒子、天貓魔盒等,其實都是屬於 Android 陣營的,接上一台顯示器,就可以當一個智能電視使用。
在國內的環境下,開發 TV App 其實並沒有遵循標準的 Google TV 的開發規範,而是把它當成一個普通的橫屏 Android App 來開發。可是在這個過程中,是需要額外處理一些手機和電視的差異的,例如:焦點的控制、選中態的控制、屏幕的適配等等。
如果這些適配都已經做的非常好了的話,是可以在 Android 手機上,不需要做任何改動和配置,就完美的運行一個原本為 Android TV 而開發的 App 的。
而在某些場景下,你可能需要對你原本想為 TV 開發的 App,做一些手機上的適配,讓它在運行在手機上的時候,呈現出另外的 UI 效果或者執行分支的邏輯。
舉個比較實際的例子:簡單的微信登錄功能,TV App 來實現這個功能,一般是展示一個登錄二維碼,讓用戶通過手機掃碼登錄,但是如果這個 App 運行在手機上的話,你可能需要的是一個按鈕,點擊吊起微信去登錄。
你別問為什麼用戶要在手機上安裝一個 TV App?為什麼不能讓用戶截圖然後去微信里掃描截圖登錄?
需求下來了,就問你能不能實現?
那麼,本文就來討論一下,如何在運行時,通過一些標識來區分當前 App 是運行在手機上還是 TV 上。
二、如何區分
既然這是一個運行時的區分,肯定是需要獲取一些設備上的差異值,來判定當前的運行環境。
那麼首先提個問題給自己,手機和 TV 到底存在哪些差異?
手機和電視的差異性:
屏幕物理尺寸不同。
布局尺寸不同。
SIM 卡的支持不同。
電源接入的方式不同。
系統參數不同。
差不多就這些差異了,接下來我們進行詳細分析。
1、屏幕物理尺寸
手機和電視的屏幕物理尺寸是完全不一樣的,但是我們也不能完全使用買電視的時候介紹的 Xx寸 來區分屏幕物理尺寸。實際上完全可以將 Android TV 當成一個大號的平板。
這裡以一個電視英寸數的計算公式,計算屏幕對角線的長度,來做一個參考的數值。
對於智能電視而言,我想最小應該都在 32 英寸,而這裡的 6.4英寸以下,主要是基於手機的一個參數判斷。
不過手機的屏幕尺寸越做越大,各大廠商現在也都在上線全面屏的產品,隨手找了小米 Mix2 的參數,尺寸為 5.99 英寸,霸么就這個 6.4 英寸的判斷條件,在現階段來看是合理的。
2、布局尺寸
既然屏幕的尺寸有差異,那麼從不同的布局中獲取布局文件也是不一樣的,可以通過 screenLayout 參數來區分出當前運行環境下命中那一套。
規則如下:
截圖來自官方文檔,有興趣的可以通篇閱讀一下。
https://developer.android.com/guide/practices/screens_support.html?hl=zh-cn
而代碼如下:
3、SIM 支持的模式
對於電視而言,就現在所了解到的,還沒有一款智能電視或者智能盒子,是可以插 SIM 卡的,所以判斷 SIM 支持的模式,基本上就可以區分齣電視還是手機了。
SIM 卡支持的模式可以使用 TelephonyManager 來獲取當前的狀態。
可以看到 可以獲取當前設備支持的 Radio 的模式。
一般而言,識別不到 SIM 的模式,就可以認為是一款不支持 SIM 插卡的設備了。
4、電源的接入方式
對於電視的電源,有什麼特點?
永遠沒有耗電的變動,獲取到的電量永遠是滿的。
電源接入的方式,使用 AC 交流電,而非 USB(充電) 或者電池。
獲取當前電源和充電的接入方式,沒什麼好說的,基本上依據這兩個條件,就可以區分出當前到底是電視還是手機/平板了。
這種方式去判斷也有缺陷,因為對於智能電視類的設備來說,還有一種設備容易被忽略,那就是投影,對於投影而言,有一些是會內置電池的。
5、UI Mode
使用 UI Mode 的方式去判斷,就需要用到一個系統服務 UIModeManager,它和一般的系統服務一樣,需要我們通過 方法獲取到。
這是一個官方給出的判斷方式,但是在國內的環境下,並不可取。因為大部分廠商的智能電視,只是拿普通的 Android 系統改了改,其實並沒有遵循 Google TV 的標準,所以這種方式在某些設備上可能會判斷出錯。
既然文檔介紹了,這裡還是簡單介紹一下。沒什麼好說的,直接上代碼就好了。
有興趣可以直接閱讀完整的官方文檔中的相關部分。
https://developer.android.com/training/tv/start/hardware.html#runtime-check
三、設計原則
這裡提供的幾種方法,其實都是猜測,都是有缺陷的。例如可能出現某些廠商的奇葩設備,出貨屏幕尺寸就是大的手機,或者有一些奇葩的電視或者盒子,就是可以支持插 SIM 卡,再或者有其實還有一些智能投影的設備,其實是內帶電池的,是有電量的消耗的。
所以最穩妥的方式,就是組合起來判斷。
這裡的判斷,是基於當前 App 是主要發布在 Android 電視的應用市場中,所以這裡的判斷條件是對手機進行嚴格判斷,其他的都認為是 Android TV 。這樣即便是誤判了,影響也不會太大。
※開發過 Android TV App 嗎?推薦個好用的工具給你!
TAG:承香墨影 |