文| 谷歌开发者技术专家, 物联网方向 (IOT GDE) 王玉成(York Wang)
物联网应用开发与手机和平板的应用开发有一些区别,那么Android Things与Android又有哪些差别呢?
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
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的调试或者是布署时启动应用。
Android Things支持Google Service的一个子集,下表列出了Android Things支持哪些API,不支持哪些API。
Supported APIs
Cast
Drive
Firebase Analytics
Firebase Cloud Messaging (FCM)
Firebase Crash Reporting
Firebase Realtime Database
Firebase Remote Config
Firebase Storage
Fit
Instance ID
Location
Nearby
Places
Mobile Vision
Unavailable APIs
AdMob
Android Pay
Firebase App Indexing
Firebase Authentication
Firebase Dynamic Links
Firebase Invites
Firebase Notifications
Maps
Play Games
Search
Sign-In
权限
Android Things无法在运行时申请权限。
通知
Android Things不支持NotificationManager。
Android Things添加了单独的API,即Things Support Library,这组API包括两个主要部分。Peripheral I/O和User-space Drivers。
这两部分API是Android的标准SDK中没有的。
GPIO可以用于传感器的控制,也可以用于工业标准协议。Native PIO可以用C/C++去操作GPIO(Developer Preview 2版本添加了NDK的支持)。
PWM用于对电机,灯等外设做细粒度控制。
最重要的一块,就是硬件协议的支持。
三种通信协议,各有各的好。其中I2C和SPI协议是同步信号,SPI比I2C的控制稍微复杂一点,SPI多了片选信号,一般是用拨码开关来做SPI的片选信号。UART属于异步信号,主要用于低速传输。三种协议刚好满足了三种不同场景的速度要求。值得一提的是,国内许多协议模块,还有总线模块,都能够用串口进行转发,而传感器模块,也都支持I2C或者是SPI接口。Android Things支持了这三种通用的串行协议,也就意味着支持了大量的传感器或者是其它外设。
这些不是传统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结合起来,把数据再进行相应的处理,是个不错的思路。
欢迎大家更多的留言,涉及到Android Things的方方面面,都可以提,我们会把好的建议转交给Android Things的产品部,你的建议,也许在某一天,就是Andorid Things的一部分。