Android與Android Things,父子還是兄弟?
物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)與手機(jī)和平板的應(yīng)用開(kāi)發(fā)有一些區(qū)別,那么 Android Things 與 Android 又有哪些差別呢?
變化
Android Things 主要在 Android 的核心框架中擴(kuò)展了一些支持物聯(lián)的 API。開(kāi)發(fā)者可以利用這些 API 直接與自定義的硬件打交道,Android Things 同時(shí)也簡(jiǎn)化了單個(gè)程序的應(yīng)用,開(kāi)機(jī)可以自動(dòng)運(yùn)行用戶程序。
核心應(yīng)用包
Android Things 不包括標(biāo)準(zhǔn)的 system app 和 content provider。也會(huì)在下面的 content provider API 中避免使用 common intent。
- CalendarContract
- ContactsContract
- DocumentsContract
- DownloadManager
- MediaStore
- Settings
- Telephony
- UserDictionary
- VoicemailContract
查看文檔請(qǐng)?jiān)L問(wèn):
developer.android.google.cn/reference/android/provider/package-summary.html
可選的顯示
Android Things 支持 Android 的通用框架,比較傳統(tǒng)的 Android 布局,少了狀態(tài)欄和導(dǎo)航按鈕,用戶只能以全屏方式來(lái)體驗(yàn)應(yīng)用。
Android Things 的應(yīng)用仍然要包含 Activity,這是因?yàn)?Activity 要接收前置應(yīng)用的焦點(diǎn)用于觸發(fā)。Android Things 不能通過(guò)非前端的應(yīng)用組件(比如服務(wù))來(lái)獲取按鍵、或者是移動(dòng)信息。
Home Activity
Android Things 只支持單應(yīng)用,應(yīng)用總?cè)肟跒?”home activity”。AndroidManifest.xml 文件中,intent filter 必須包括兩項(xiàng)內(nèi)容:
- category.DEFAULT和 category.IOT_LAUNCHER 用于支持 iot;
- category.LAUNCHER 用于 Android Studio 的調(diào)試或者是布署時(shí)啟動(dòng)應(yīng)用。
Google Service
Android Things 支持 Google Service 的一個(gè)子集,下表列出了 Android Things 支持哪些 API,不支持哪些 API。
權(quán)限與通知
- 權(quán)限:Android Things 無(wú)法在運(yùn)行時(shí)申請(qǐng)權(quán)限。
- 通知:Android Things 不支持 NotificationManager。
Things Support Library
Android Things 添加了單獨(dú)的 API,即 Things Support Library,這組 API 包括兩個(gè)主要部分。Peripheral I/O 和 User-space Drivers。
這兩部分 API 是 Android 的標(biāo)準(zhǔn) SDK 中沒(méi)有的。
我們還是先看看 Peripheral IO 里面有哪些東西:
GPIO 可以用于傳感器的控制,也可以用于工業(yè)標(biāo)準(zhǔn)協(xié)議。Native PIO 可以用 C/C++ 去操作 GPIO ( Developer Preview 2 版本添加了 NDK 的支持)。
PWM 用于對(duì)電機(jī),燈等外設(shè)做細(xì)粒度控制。
最重要的一塊,就是硬件協(xié)議的支持。
三種通信協(xié)議,各有各的好。其中 I2C 和 SPI 協(xié)議是同步信號(hào),SPI 比 I2C 的控制稍微復(fù)雜一點(diǎn),SPI 多了片選信號(hào),一般是用撥碼開(kāi)關(guān)來(lái)做 SPI 的片選信號(hào)。UART 屬于異步信號(hào),主要用于低速傳輸。三種協(xié)議剛好滿足了三種不同場(chǎng)景的速度要求。值得一提的是,國(guó)內(nèi)許多協(xié)議模塊,還有總線模塊,都能夠用串口進(jìn)行轉(zhuǎn)發(fā),而傳感器模塊,也都支持 I2C 或者是 SPI 接口。Android Things 支持了這三種通用的串行協(xié)議,也就意味著支持了大量的傳感器或者是其它外設(shè)。
然后接下來(lái)看看 User-space Divers 是個(gè)什么:
這些不是傳統(tǒng) Android 的基本的 API 么,為啥在 Android Things 中需要單獨(dú)的列為一類(lèi)API支持呢?回到先前的我們比較 Android Things 和傳統(tǒng)的 Android 的差異性上來(lái),Android Things 是不支持 Service 用于后臺(tái)廣播的,當(dāng)我們需要監(jiān)聽(tīng)設(shè)備時(shí),需要在 Service 上面封裝 Driver,然后在 Activity 中去響應(yīng)事件。
GPS 提供高精度的物理定位信息,我們可以把 GPS 的數(shù)據(jù)結(jié)合 Wi-Fi,或者是 Fused Location Provider,最終得到定位信息的結(jié)果。
利用 INPUT 接口,我們可以把嵌入式設(shè)備中的觸摸屏、鍵盤(pán)、游戲手柄等設(shè)備,與拖拽、手指滑動(dòng)等操作結(jié)合起來(lái),讓用戶和設(shè)備進(jìn)行簡(jiǎn)單交互。
Sensor 可以測(cè)量和報(bào)告物理環(huán)境的狀態(tài),Android Things 的傳感器框架 sensor fusion 可以把多種物理傳感器的原始數(shù)據(jù)轉(zhuǎn)化成統(tǒng)一的虛擬傳感器數(shù)據(jù)。這里稍微補(bǔ)充一下,sensor fusion 在 Android 中已經(jīng)有 API 了,網(wǎng)上也有許多代碼做參考,就不在這兒展開(kāi)了。在實(shí)際的代碼實(shí)現(xiàn)中,開(kāi)發(fā)者自己實(shí)現(xiàn) sensor 的驅(qū)動(dòng),然后與 sensor fusion 結(jié)合起來(lái),把數(shù)據(jù)再進(jìn)行相應(yīng)的處理,是個(gè)不錯(cuò)的思路。
【本文是51CTO專(zhuān)欄機(jī)構(gòu)“谷歌開(kāi)發(fā)者”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】