GDE專欄 | Android與Android Things,父子還是兄弟?

谷歌開發者_發表於2017-03-07

640?wx_fmt=gif


640?wx_fmt=png


文| 谷歌開發技術專家 (GDE) 王玉成 (York Wang)


物聯網應用開發與手機和平板的應用開發有一些區別,那麼 Android Things 與 Android 又有哪些差別呢?



變化

640?wx_fmt=png


Android Things 主要在 Android 的核心框架中擴充套件了一些支援物聯的 API。開發者可以利用這些 API 直接與自定義的硬體打交道,Android Things 同時也簡化了單個程式的應用,開機可以自動執行使用者程式。



核心應用包

Android Things 不包括標準的 system app 和 content provider。也會在下面的 content provider API 中避免使用 common intent。

  • CalendarContract

  • ContactsContract

  • DocumentsContract

  • DownloadManager

  • MediaStore

  • Settings

  • Telephony

  • UserDictionary

  • VoicemailContract


檢視文件請訪問:

developer.android.google.cn/reference/android/provider/package-summary.html



可選的顯示

Android Things 支援 Android 的通用框架,比較傳統的 Android 佈局,少了狀態列和導航按鈕,使用者只能以全屏方式來體驗應用。


Android Things 的應用仍然要包含 Activity,這是因為 Activity 要接收前置應用的焦點用於觸發。Android Things 不能通過非前端的應用元件(比如服務)來獲取按鍵、或者是移動資訊。



Home Activity

Android Things 只支援單應用,應用總入口為 ”home activity”。AndroidManifest.xml 檔案中,intent filter 必須包括兩項內容:

  • category.DEFAULT和 category.IOT_LAUNCHER 用於支援 iot;

  • category.LAUNCHER 用於 Android Studio 的除錯或者是佈署時啟動應用。


640?wx_fmt=png



Google Service

Android Things 支援 Google Service 的一個子集,下表列出了 Android Things 支援哪些 API,不支援哪些 API。


640?wx_fmt=png



許可權與通知

許可權:Android Things 無法在執行時申請許可權。

通知:Android Things 不支援 NotificationManager。



 Things Support Library

Android Things 新增了單獨的 API,即 Things Support Library,這組 API 包括兩個主要部分。Peripheral I/O 和 User-space Drivers。

640?wx_fmt=png


這兩部分 API 是 Android 的標準 SDK 中沒有的。


我們還是先看看 Peripheral IO 裡面有哪些東西:

640?wx_fmt=png


GPIO 可以用於感測器的控制,也可以用於工業標準協議。Native PIO 可以用 C/C++ 去操作 GPIO ( Developer Preview 2 版本新增了 NDK 的支援)。


PWM 用於對電機,燈等外設做細粒度控制。


最重要的一塊,就是硬體協議的支援。

640?wx_fmt=png


三種通訊協議,各有各的好。其中 I2C 和 SPI 協議是同步訊號,SPI 比 I2C 的控制稍微複雜一點,SPI 多了片選訊號,一般是用撥碼開關來做 SPI 的片選訊號。UART 屬於非同步訊號,主要用於低速傳輸。三種協議剛好滿足了三種不同場景的速度要求。值得一提的是,國內許多協議模組,還有匯流排模組,都能夠用串列埠進行轉發,而感測器模組,也都支援 I2C 或者是 SPI 介面。Android Things 支援了這三種通用的序列協議,也就意味著支援了大量的感測器或者是其它外設。


然後接下來看看 User-space Divers 是個什麼:

640?wx_fmt=png


這些不是傳統 Android 的基本的 API 麼,為啥在 Android Things 中需要單獨的列為一類API支援呢?回到先前的我們比較 Android Things 和傳統的 Android 的差異性上來,Android Things 是不支援 Service 用於後臺廣播的,當我們需要監聽裝置時,需要在 Service 上面封裝 Driver,然後在 Activity 中去響應事件。


GPS 提供高精度的物理定位資訊,我們可以把 GPS 的資料結合 Wi-Fi,或者是 Fused Location Provider,最終得到定位資訊的結果。


利用 INPUT 介面,我們可以把嵌入式裝置中的觸控式螢幕、鍵盤、遊戲手柄等裝置,與拖拽、手指滑動等操作結合起來,讓使用者和裝置進行簡單互動。


Sensor 可以測量和報告物理環境的狀態,Android Things 的感測器框架 sensor fusion 可以把多種物理感測器的原始資料轉化成統一的虛擬感測器資料。這裡稍微補充一下,sensor fusion 在 Android 中已經有 API 了,網上也有許多程式碼做參考,就不在這兒展開了。在實際的程式碼實現中,開發者自己實現 sensor 的驅動,然後與 sensor fusion 結合起來,把資料再進行相應的處理,是個不錯的思路。


下一講我們會去認識一種協議,並且理解如何使用這種協議。



 後記

640?wx_fmt=jpeg

您如果有任何涉及到 Android Things 方面的想法,都歡迎大家在下方留言,我們會把好的建議轉交給 Android Things 的產品部門。也許在某一天,你的建議就是 Andorid Things 的一部分。


推薦閱讀:

GDE專欄 | 物聯網到底是什麼?

GDE專欄 | 完美支援Android Things的開發板都在這裡了

GDE專欄 | Android Things開發環境搭建

Android無處不在,Android開發者大有可為



640?wx_fmt=gif

相關文章