區分App執行在手機還是電視,就是要穩

承香墨影發表於2017-06-05

版權宣告:

本賬號釋出文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。

未經允許,不得轉載。

一、前言

現在 Android 智慧電視出貨量已經非常的大了,近兩年產的電視,基本上都屬於智慧電視,而很大一部分都是搭載的 Android 系統。

當然,除了智慧電視之外,還有一些智慧盒子,例如:小米盒子、天貓魔盒等,其實最終都是 Android 系統。

在國內的環境下,開發的 TV App 其實也並不是遵循的 Google TV 的開發規範,而都是當成一個普通的 Android App 來開發的。在這個過程中,實際上是需要處理一些手機和電視的差異的,例如:焦點、選中狀態、螢幕適配等等,這些有時間再細說。

如果,螢幕適配做的好的話,實際上是可以無縫在手機裝置上,執行一個原本為了 Android TV 而開發的 App。

而有些場景下,為了節約開發成本,有可能需要對一些在電視上執行的 App 做一個手機端的適配,最常見的場景,一個微信登入的功能,TV App 做的一般是提供一個二維碼,讓手機掃碼登入,但是當這個程式執行在手機端的時候,就可能需要一個按鈕,點選調起微信去登入了。

那麼,如何在同一個 App 內,區分當前執行在手機裝置上,還是電視裝置上,就尤為重要了。

二、如何區分

既然要對執行環境做一個區分,那麼就需要考慮到,手機和電視的一些差異。

手機和電視的差異性:

  • 螢幕物理尺寸不同。
  • 佈局尺寸不同。
  • SIM 卡的狀態不同。
  • 電源接入的方式不同。

1、螢幕物理尺寸

手機和電視的螢幕物理尺寸是完全不一樣的,但是我們也不能完全使用買電視的時候介紹的 Xx寸 來區分螢幕物理尺寸。實際上完全可以將 Android 電視當成一個大平板。

這裡以一個電視英寸數的計算公式,計算螢幕對角線的長度,來做一個參考的數值。

區分App執行在手機還是電視,就是要穩

既然把電視當成一個大平板,這裡計算出來的數值,對於電視而言,基本上都是大於 6.5 的,所以以這個條件做判斷,是有一定參考價值的。

2、佈局尺寸

既然螢幕的尺寸有差異,那麼從不同的佈局中獲取佈局檔案也是不一樣的,可以通過 screenLayout 引數來區分出當前命中那一套。

規則如下:

區分App執行在手機還是電視,就是要穩

截圖來自官方文件,有興趣的可以通篇閱讀一下。

developer.android.com/guide/pract…

而程式碼如下:

區分App執行在手機還是電視,就是要穩

3、SIM 支援的模式

對於電視而言,就現在所瞭解到的,還沒有一款智慧電視或者智慧盒子,是可以插 SIM 卡的,所以判斷 SIM 支援的模式,基本上就可以區分出電視還是手機了。

SIM 卡支援的模式可以使用 TelephonyManager 來獲取當前的狀態。

區分App執行在手機還是電視,就是要穩

可以看到 getPhoneType() 可以獲取當前裝置支援的 Radio 的模式。

區分App執行在手機還是電視,就是要穩

一般而言,判斷不出來,就可以人為是一款不支援 SIM 插卡的裝置了。

4、電源的接入方式

對於電視的電源,有什麼特點?

  1. 永遠沒有耗電的變動,獲取到的電量永遠是滿的。
  2. 電源接入的方式,使用 AC 交流電,而非 USB 或者電池。

獲取當前電源和充電的接入方式,沒什麼好說的,基本上依據這兩個條件,就可以區分出當前到底是電視還是手機/平板了。

區分App執行在手機還是電視,就是要穩

三、設計原則

這裡提供的幾點方法,其實都是猜測,都是有缺陷的。例如可能出現某些廠商的奇葩裝置,出貨螢幕尺寸就是大的手機,或者有一些奇葩的電視或者盒子,就是可以支援插 SIM 卡,再或者有其實還有一些智慧投影的裝置,其實是內帶電池的,是有電量的消耗的。

所以最穩妥的方式,就是組合起來判斷。

區分App執行在手機還是電視,就是要穩

而這裡實際上,這款 App 依然是主要需要釋出Android 電視市場的,所以這裡的判斷,對手機進行嚴格判斷,其他的都認為是 Android TV 。這樣即便是誤判了,影響也不會太大。

區分App執行在手機還是電視,就是要穩
公眾號二維碼.jpg

相關文章