摘要:作为物联网控制APP制作系列文章的最终版,本文带给大家的福利是让大家学会制作完完全全自己可控的安卓APP。与前几篇文章介绍的使用第三方平台自动生成、第三方平台帮助打包、以及android studio制作框架显示IoT Studio制作的控制页面相比,最大的优势是源代码可控,其次是免费(对于开发者而言)。难点是需要掌握的技术太多。本篇文章尽量详细地介绍实现的基本原理以及操作步骤,并最终提供可以正常编译的源代码,让您既有理论学习,也有实践对象。

实现的效果如下:

所用的软件环境:win7 x64,android studio 3.5.1。

目录

1.为什么第三方平台要收费?

2.自己做android studio程序难在哪里?

3.自己做android studio程序的基本思路

4.android studio制作物联网控制APP实战

5.结论


1.为什么第三方平台要收费?

因为物联网控制系统的高门槛,第三方平台设计的这些在线产品凝聚了大批程序员的辛勤劳动。试想你学会了之后,会不会通过这一项技能去找工作,或者做项目,那么找工作、做项目的目的又是为了什么?换位思考一下就明白了。

第三方平台提供优质的服务,你支付合理的价款。如果你要免费,那也可以,花几十乃至上百倍的时间和精力去学习如何来做吧。

2.自己做android studio程序难在哪里?

难在调试。

做嵌入式的老程序员一定明白这个道理。

你认为所有的代码都没问题,可就是调不通。有时一个标点让你困住一个月。

本文也是一样,看似简简单单的源代码,其实让它成功生成apk文件,与云平台成功通信之前,已经解决了无数的问题,熬了很多个夜。

或者说,有的代码即使给了你,生成了安装包,最后也不能与云平台通信,不能控制物联网设备。

物联网控制app就是这样,它不是一个简单的本机activity,自己操作就行了,而是要与云端通信,与现实世界的物联网设备通信才算是达到目标。

3.自己做android studio程序的基本思路

无论是第三方还是自己做,核心都是为了实现通信数据的传输。能坚持看到这里的同学,默认你已经掌握了MQTT的基本知识,如果还没有掌握,请自行在CSDN查资料学习。

我简单形容一下,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM多年前研发的一种通信协议,能够在低带宽下可靠传输(适应了花费较少的小流量包或者物联网卡),最开始并不是为物联网设计,但是在物联网热潮下壮大,几乎成为物联网通信协议的事实上的国际标准。

有需要的同学可以简单浏览一下我的另一篇文章进行了解。我不是MQTT专家,不懂的不多说。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云

从上文中可以了解到,可以在PC端使用MQTT.FX软件来连接阿里云物联网平台,订阅/发布消息。

不过要想与阿里云物联网平台成功通信,需要对MQTT客户端进行设置,关键的有几个参数,比如Broker Address,Broker Port以及Client ID。其中Client ID是几个参数经过加密算法(阿里云平台的类型是hmacsha1)计算出来的。

需要加密?当然了。要不然怎么保证物联网通信的可靠性!所以自己用服务器搭建MQTT服务器,玩玩可以,要真的做实际的项目用,建议还是通过大平台来操作。大平台会提供所有必要的安全、加密措施。

有了这些基本的条件之后,就可以顺利连接云平台,开展订阅/发布业务了。

无论是APP,还是云平台,还是物联网终端,其实都是采用的这种订阅/发布方式来通信,它相当先进。

我们用android studio制作自己的APP,核心也就是在APP内部实现自己的客户端,在APP内部按照规定进行加密。然后就可以订阅/发布主题了。能够订阅/发布主题,那么其他的就都是细节问题了,已经没有什么可以难得到你的了。

阿里云的IoT Studio移动可视化开发,其实相当于网页端已经默认打包好了跟阿里云物联网平台通信的组件/支持包,所以才能实现少量代码甚至无代码的控制页开发。

4.android studio制作物联网控制APP实战

首先需要在阿里云物联网平台新建了产品和设备

如何在阿里云物联网平台新增一个设备

然后准备android studio开发环境,本文使用的是android studio3.5.1,gradle采用的是gradle-5.4.1-all,请注意,采用的是国内镜像,否则可能卡一天不带动弹的。

参考文章:gradle不同版本下载太慢---腾讯做了国内镜像可以直接下载

然后在工程build.gradle中,添加Paho仓库地址。请注意,添加paho仓库的同时,修改一下其他仓库的地址,因为阿里云提供的仓库速度更快。

参考文章android studio设置build.gradle为阿里云云效地址的方法

然后在应用build.gradle中,添加Paho Android Service。

然后在AndroidManifest.xml中添加以下信息

同时添加权限。到这里,就完成了paho的基本设置。

paho是什么?下面是英文解释,是一个用标准C语言写的客户端,保证了非常好的可移植性。

MQTT C Client for Posix and Windows

The Paho MQTT C Client is a fully featured MQTT client written in ANSI standard C. C was chosen rather than C++ to maximize portability. A C++ API over this library is also available in Paho.

In fact there are two C APIs. "Synchronous" and "asynchronous" for which the API calls start with MQTTClient and MQTTAsync respectively. The synchronous API is intended to be simpler and more helpful. To this end, some of the calls will block until the operation has completed, which makes programming easier. In contrast, only one call blocks in the asynchronous API - waitForCompletion. Notifications of results are made by callbacks which makes the API suitable for use in environments where the application is not the main thread of control.

接下来开始连接物联网,在MainActivity里面添加三元组,主题以及客户端信息。

接下来准备连接。计算MQTT连接参数clientId、username和password,并将username和password设置到MqttConnectOptions对象中。

接下来创建一个MqttAndroidClient对象,设置回调接口,然后使用mqttConnectOptions调用connect方法,即可建立连接。

发布消息的封装函数

通过按键发布消息是在OnCreate里面,向阿里云平台发布一个消息“hello IoT”。

最后是编译,解决了所有设置等细节问题之后,成功编译。

将apk文件复制到手机上,然后安装,再运行。

可以发现阿里云物联网平台相应的设备已经在线。

点击PUBULISH按钮,回到阿里云物联网平台下的日志里面查看,成功发布了消息。

至此,一个完整的能正常连接阿里云物联网平台的的MQTT客户端已经调试完成。我们学会了publish,那么就可以subscribe,物联网MQTT通信的核心就掌握了。接下来无论是控制哪个物联网设备,哪个属性,都可以采取类似的操作了。

5.结论

物联网控制APP编程的关键,首先是MQTT客户端,就像是在自己的APP里面内置了一个MQTT.FX软件一样,只不过连接物联网平台的信息都是APP自动计算并连接,不需要自己再根据三元组来计算了;其次是订阅发布功能的实现,物联网通信,采用的是订阅/发布模式,不同的主题对应的不同的属性,掌握了这个技能就能实现千变万化的“物”的操作;最后也是最重要的是调试技能,没有这个技能,就是给你源代码,你也编译不成功,编译成功了,简单改动一下,你又不会了。

本篇文章基于阿里云帮助文档若干篇和自己调试android studio程序的经验而来,不是所有的源代码中的每个单词都是我一个人写的。感谢阿里云的伙伴们,感谢帮助我写一系列文章的各位老师和同学。

希望能帮助到各位。

源代码凝结了很久的劳动,供有需要的朋友。

https://download.csdn.net/download/youngwah292/14015473

欢迎各种抛转。

物联网控制APP入门专题(五)---使用android studio直接编写物联网控制APP相关推荐

  1. 物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作

    微信小程序连接阿里云物联网平台云端API实现物联操控 03-25 其中包含cryptojs.uuid生成模块,还有用于微信小程序连接阿里云物联网平台云端API的专属sdk,已结实现效果demo,只需填 ...

  2. 物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架

    摘要:上篇文章讲了如何用阿里云IoT Studio快速制作一个网页版的手机端,以及通过第三方平台将这个网页打包成一个APK文件,使它可以安装到手机实现APP的功能.但是使用第三方平台做的APP是需要收 ...

  3. [免费专栏] Android安全之动态调试APP的一些技巧「Android Studio调试」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  4. Android Studio 设置图标LOGO,APP下载到手机以后图标无变化

    Android Studio 设置图标LOGO,APP下载到手机以后显示小机器人 最近刚入门Android studio,一直都是默认图标,今天心血来潮想自定义图标,发现搜索到的各种方法都没办法成功更 ...

  5. 基于Android studio 的学生课堂管理app

    1.还是一如既往的期末考核的作业,当然不是我的,所所实话,这个题目才是符合大一学生课设的标准,难度适中,但是必须要花费大量时间题目: 2.基于Android studio 的掌上课堂app,主要是由学 ...

  6. android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题

    android studio AVD模拟器安装某些app出现 "app not installed(未安装应用程序)"的问题 参考: 安装apk时出现INSTALL_FAILED_ ...

  7. android studio 编译遇到报错 app:compileDebugJavaWithJavac 处理办法

    android studio编译遇到报错app:compileDebugJavaWithJavac处理办法 android studio 在编译时经常会遇到如下图片中这个错误,但是程序运行时可以正常运 ...

  8. Android Studio开发环境下让App自动签名

    Android Studio开发环境下让App自动签名 前言: 分享这个的原因有两个: 第一,在开发的过程中我们会发现关于微信的分享支付或者是支付宝的支付等一些功能的时候必须是要签名包,否则会失败,每 ...

  9. android studio调用python,Android studio中编写Python代码-2

    Chaquopy 教程 Chaquopy Chaquopy的作用:使用Chaquopy在Android Studio添加Python环境,java和Python互调 目前调试后APP可以正常运行(20 ...

最新文章

  1. C++primer笔记之关联容器
  2. Win7下安装一个装逼文本编辑器Atom + activate-power-mode插件
  3. mysql为什么没有nvarchar,关于mysql:为什么不将每个VARCHAR指定为VARCHAR(65535)?
  4. aws java mysql_Lambda本地连接到Aurora MySql - 部署到AWS时超时
  5. Android sharedPreference设置缓存时间
  6. LightOJ - 1074 Extended Traffic(最短路+判断负环)
  7. 视频控件VideoCapX的使用指南和常见问题合集
  8. c语言字符串传给swift,如何把字符串数组从 Swift 传递给 C
  9. oracle启动bat命令,ORACLE 启动 bat 脚本
  10. C++---之动态内存申请new
  11. HDU 1317 XYZZY
  12. 禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
  13. 【高级检索】现在还有人不会用百度的搜索语法?
  14. ios html转换成网页,ios App加载本地HTML网页,点击网页链接跳转到app页面的方法
  15. 三款拼音输入法的特性对比
  16. STM32高级开发(15)-使用eclipse开发STM32
  17. Excel函数带你看透身份证号
  18. Amendment Quotation function in CLCL Plugin
  19. 数据结构课程设计 公交系统
  20. UE4-4.26蓝图功能实现:按键升降电梯

热门文章

  1. JAVA Scanner 类用法小结
  2. iMazing2.15.9版app苹果手机备份同步神器存档恢复超方便
  3. es6 arry fill
  4. 《庖丁解牛Linux内核》笔记之:汇编基础
  5. 盘古开源:分布式数据存储,实现更多人参与的下一代互联网新基建
  6. 【专知荟萃18】目标跟踪Object Tracking知识资料全集(入门/进阶/论文/综述/视频/专家,附查看)
  7. 盘古开源解析:芯片订单超过产能,2022汽车出现缺芯难题
  8. 盘古开源解析:数据防泄漏对于数据安全的重要性
  9. 乐视:基于Docker的RDS,我们是这样做的
  10. 电脑如何分盘、合盘?关于硬盘的分盘,你所不知道的那些事情