写在前面
继上一篇手机秒变IoT设备?——巧妙利用阿里云物联网平台, 作者发现自己吹了个牛,五行代码根本做不到。作者阉割了一些代码才勉强可以实现,看一下效果:
前情回顾
温故而知新
一、上一篇文章介绍的是一个叫Simulator的东西,有两个构造方法:
- 传入productKey(平台创建)、deviceName(自己填写),该方法会自动为你在productKey下创建一个设备并在本地记录三元组
- 传入productKey、deviceName、deviceSecret,该方法会直接使用此三元组
二、调用simulator的connect方法可以凭借三元组连接物联网平台,并可以设置一个受到消息时的回调方法
三、调用uplink方法进行数据上报,我们上报的是一个地理位置属性,可以通过android的API获取经纬度
开始操作
8说了,开冲
一、环境搭建
- 下载android studio,傻瓜式操作: 下一步,下一步,直到最终创建好了一个安卓项目。作者创建的是空的android项目
- 激活开发者选项(作者的手机是mix2,设置里我的设备>全部参数 连续点击MIUI版本)
- 进入设置>更多设置 找到开发者选项, 打开开发者选项、usb调试、usb安装
- usb线连接手机和电脑,运行第一步创建的app,应该能发现Connected Devices里有你的手机了,如果没有的话你也可以Create New Virtual Device。傻瓜式操作,下一步到底。
二、编写代码
目录结构如上图所示
将上一篇文章中的代码移植过来,另外android相关的代码写了四个类。
详细代码将扔到github或者进群联系我~
- LocationUtils: 网上抄的一个调用android获取经纬度的工具类,提供两种方式1)网络定位 2)gps定位
- LocationService:安卓的Service框架,可以后台运行。在这里进行一些初始化和地理位置定时上报
- CoordinateTransformUtil:网上抄的一个坐标系转换工具,安卓获取的经纬度好像四wgs84的坐标系,需要转换一下国测局02坐标系
- MainActivity: android的Activity, 简单理解为一个页面吧
- 重要改动(阉割) Simulator去掉了pk,dn的构造方法,也就是说不支持自动创建设备了。原因是自动创建设备依赖com.aliyun.api.gateway:sdk-core-java:1.1.0,通过HttpClient调用阿里云Iot的ApiGateway的http接口创建设备。HttpClient在高API Level的android sdk中已经废弃了,但是还站着坑(墙裂吐槽)
程序运行起来之后会使用到INSTANCE字段,而默认加载的是android.jar中的AllowHostnameVerifier类,报错找不到static的INSTANCE字段【笋干爆炸】,总之作者花了好长时间都解决不了这个问题,干脆手起刀落先把自动创建设备的功能阉了。以后有时间一定弄一版功能健全的。
最后
app凭借三元组变身IoT设备,打开app,可以看到经纬度开始上报,设备上线了~。后续根据二维数据分析产品可以进行一些设备的查找,轨迹查看,围栏操作等(即将上线)。
轨迹大致是这样
最后的最后
楼主更新太慢了,产品更新也太慢了。因为实在是太缺前端了,楼主最近在学react。。。请各位原谅~~