Android Studio开发手机APP(二)-利用MQTT通信开发物联网程序

一、打开权限

开发物联网程序,最重要的当然联网了,所以我们要让APP可以连接网络,在
Android Studio中,就需要为我们的APP申请网络权限。如下,打开AndroidManifest.xml 文件:

添加如下两行:

<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

添加后如下所示:

二、导入MQTT包

因为我们需要使用MQTT协议,所以为了便捷开发,我们可以直接导入一个MQTT的jar包(org.eclipse.paho.client.mqttv3-1.2.0),可以到这位大佬的下载站点下载http://www.mculover666.cn/download/,当然了,贴上官网下载链接https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/

然后我们将其导入我们的Android Studio工程中,导入很简单,复制粘贴就行。
在Android Studio中打开project视图查看:
然后我们选中jar包复制,在Android Studio 如下目录点击粘贴:

然后我们要使之生效,选中,右键,点击【Add As Library】,这样就完成了。

三、编写代码

准备工作做好了,我们就开始正式工作了,打开Java主程序:

首先,定义一些必要的变量(创建在MainActivity类里即可),其实就是连接MQTT服务端或者说代理端需要的一些信息:

    private String serverUri = "tcp://127.0.0.1:1883";    //这里可以填上各种云平台的物联网云平台的域名+1883端口号,什么阿里云腾讯云百度云天工物接入都可以,// 这里我填的是我在我的阿里云服务器上搭建的EMQ平台的地址,// 注意:前缀“tcp://”不可少,之前我没写,怎么都连不上,折腾了好久private String userName = "android";                    //然后是你的用户名,阿里云腾讯云百度云天工物接入这些平台你新建设备后就自动生成了private String passWord = "1234567";                    //用户名对应的密码,同样各种云平台都会对应生成密码,这里我的EMQ平台没做限制,所以用户名和密码可以随便填写private String clientId = "app"+System.currentTimeMillis(); //clientId很重要,不能重复,否则就会连不上,所以我定义成 app+当前时间private String mqtt_sub_topic = "Android_Get";          //需要订阅的主题private String mqtt_pub_topic = "Android_Set";          //需要发布的主题

然后我们封装一个简易的toast打印程序:

private void makeToast(String toast_str) {Toast.makeText(MainActivity.this, toast_str, Toast.LENGTH_LONG).show();
}

尝试打印一下我们自己创建得到的clientId:

makeToast("clientID:"+clientId);

整体代码如下:

实现效果如下:

我们创建一个mqtt客户端对象,

private MqttClient mqtt_client;                         //创建一个mqtt_client对象

然后我们编写一个mqtt_init_Connect();函数将mqtt_client实例化并启动连接:

public void mqtt_init_Connect()
{try {//实例化mqtt_client,填入我们定义的serverUri和clientId,然后MemoryPersistence设置clientid的保存形式,默认为以内存保存mqtt_client = new MqttClient(serverUri,clientId,new MemoryPersistence());//创建并实例化一个MQTT的连接参数对象options = new MqttConnectOptions();//然后设置对应的参数options.setUserName(userName);                  //设置连接的用户名options.setPassword(passWord.toCharArray());    //设置连接的密码options.setConnectionTimeout(30);               // 设置超时时间,单位为秒options.setKeepAliveInterval(50);               //设置心跳,30soptions.setAutomaticReconnect(true);            //是否重连//设置是否清空session,设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接options.setCleanSession(true);//设置回调mqtt_client.setCallback(new MqttCallback() {@Overridepublic void connectionLost(Throwable cause) {//连接丢失后,一般在这里面进行重连makeToast("connectionLost");}@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {//publish后会执行到这里}@Overridepublic void messageArrived(String topicName, MqttMessage message) throws Exception {//subscribe后得到的消息会执行到这里面}});//连接mqtt服务器mqtt_client.connect(options);}catch (Exception e) {e.printStackTrace();makeToast(e.toString());}
}

然后我们在onCreate方法里调用,

然后我们安装运行APP,在我的EMQ后台已经可以看到APP已经连接了:

这里贴上Java主程序的代码:

package com.example.iot;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import java.util.concurrent.ScheduledExecutorService;public class MainActivity extends AppCompatActivity {private String serverUri = "tcp://127.0.0.1:1883";  //这里可以填上各种云平台的物联网云平的域名+1883端口号,什么阿里云腾讯云百度云天工物接入都可以,// 这里我填的是我在我的阿里云服务器上搭建的EMQ平台的地址,// 注意:前缀“tcp://”不可少,之前我没写,怎么都连不上,折腾了好久private String userName = "android";                    //然后是你的用户名,阿里云腾讯云百度云天工物接入这些平台你新建设备后就自动生成了private String passWord = "1234567";                    //用户名对应的密码,同样各种云平台都会对应生成密码,这里我的EMQ平台没做限制,所以用户名和密码可以随便填写private String clientId = "app"+System.currentTimeMillis(); //clientId很重要,不能重复,否则就会连不上,所以我定义成 app+当前时间private String mqtt_sub_topic = "Android_Get";          //需要订阅的主题private String mqtt_pub_topic = "Android_Set";          //需要发布的主题private MqttClient mqtt_client;                         //创建一个mqtt_client对象MqttConnectOptions options;private ScheduledExecutorService scheduler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//makeToast("clientID:" + clientId);mqtt_init_Connect();}public void mqtt_init_Connect(){try {//实例化mqtt_client,填入我们定义的serverUri和clientId,然后MemoryPersistence设置clientid的保存形式,默认为以内存保存mqtt_client = new MqttClient(serverUri,clientId,new MemoryPersistence());//创建并实例化一个MQTT的连接参数对象options = new MqttConnectOptions();//然后设置对应的参数options.setUserName(userName);                  //设置连接的用户名options.setPassword(passWord.toCharArray());    //设置连接的密码options.setConnectionTimeout(30);               // 设置超时时间,单位为秒options.setKeepAliveInterval(50);               //设置心跳,30soptions.setAutomaticReconnect(true);            //是否重连//设置是否清空session,设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接options.setCleanSession(true);//设置回调mqtt_client.setCallback(new MqttCallback() {@Overridepublic void connectionLost(Throwable cause) {//连接丢失后,一般在这里面进行重连makeToast("connectionLost");}@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {//publish后会执行到这里}@Overridepublic void messageArrived(String topicName, MqttMessage message) throws Exception {//subscribe后得到的消息会执行到这里面}});//连接mqtt服务器mqtt_client.connect(options);}catch (Exception e) {e.printStackTrace();makeToast(e.toString());}}public void publishMessage(String topic,String message_str){try {MqttMessage message = new MqttMessage();message.setPayload(message_str.getBytes());if(mqtt_client.isConnected()){mqtt_client.publish(topic, message);}} catch (MqttException e) {e.printStackTrace();}}private void makeToast(String toast_str) {Toast.makeText(MainActivity.this, toast_str, Toast.LENGTH_LONG).show();}
}

Android Studio开发手机APP(二)-利用MQTT通信开发物联网程序相关推荐

  1. Android Studio制作手机App:通过手机蓝牙(Bluetooth)与STM32上的低功耗蓝牙(HC-42)连接通信,实现手机端对单片机的控制。

    背景: 本文的内容是针对单片机蓝牙模块(HC-42)开发的手机App.在这之前,我想先声明一点,手机与手机间的蓝牙连接方式"与"手机与HC间的蓝牙连接方式"是不一样的.原 ...

  2. 利用Android Studio快速搭建App

    大家好,我是烤鸭: 给大家分享一个简单的用Android Studio快速搭建app 工具: Android Studio 64位 专业版 插件: Datepicker Timepicker okht ...

  3. php开发的app商城,如何利用PHP语言开发手机APP

    如何利用PHP语言开发手机APP 一般的PHP框架都可以用来做app后台服务器.因为原理上客户端从你这边拿的都是字符串数据,所以就算你不用框架也没有问题,不过会引发后续的问题.PHP提供API给客户端 ...

  4. python开发app的软件_如何利用python开发手机app

    python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用python开发的app应当是作为编码练习,加上目前这方面的模块还不是特别成熟,bug比较多. 准备工作 利用python开发a ...

  5. php语言能开发app吗_怎么利用PHP框架语言开发手机app?

    原标题:怎么利用PHP框架语言开发手机app? 一般的PHP框架都可以用来做app后台服务器.因为原理上客户端从你这边拿的都是字符串数据,所以就算你不用框架也没有问题,不过会引发后续的问题.PHP提供 ...

  6. php开发安卓应用程序,如何利用PHP语言开发手机APP

    一般的PHP框架都可以用来做app后台服务器.因为原理上客户端从你这边拿的都是字符串数据,所以就算你不用框架也没有问题,不过会引发后续的问题.PHP提供API给客户端就好了,API描述方式有很多种:R ...

  7. 利用PHP语言开发手机app后台服务器的框架是什么?或者说开发流程是怎么样的?

    最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的 不会涉 ...

  8. android获取其他app布局,Android Studio查看其它APP的布局结构

    概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 (2)运行Android Studio,打开 ...

  9. Android 开源热库汇总(二):快速开发库

    Android 开源热库汇总(一):基本库 Android 开源热库汇总(二):快速开发库 1.常用控件 PhotoView 一款ImageView展示框架,支持缩放,响应手势 https://git ...

  10. 基于Android平台的记事本软件(Android Studio项目+报告+app文件)

    移动应用开发技术 期末考核报告 题   目:        基于Android平台的记事本软件             学生姓名     学生学号                           ...

最新文章

  1. thinkphp5/phpstudy分析入口文件index.php及localhost和配置域名访问网站根目录www
  2. wxWidgets:wxColourPickerCtrl类用法
  3. java打星星_java实现星星图形的输出
  4. TTL电平、CMOS电平、RS232通信电平的概念及区别
  5. group by rollup
  6. 栈溢出笔记1.10 基于SEH的栈溢出
  7. 查oracle执行的sql,oracle查询正在执行的sql
  8. Java就业面试问题大全
  9. 阿里云服务器租用价格表分享(北京地域、入门级、windows系统)
  10. R的爬虫和回归模型案例-以北京自如房租价格为例
  11. 人工智能会为远程学习带来春天吗?
  12. win7音量图标点了没反应的修复方法
  13. Excel数据透视和Python数据透视
  14. 目睹鸿蒙开创四大至高位面,第二十三章 鸿蒙四大至高规则
  15. 杰理AC692X---简介(1)
  16. freepascal linux 界面,FreePascal中的编译器选项
  17. c语言中fbfd函数,FBFD
  18. 树莓派 java 驱动 4.2寸 微雪 墨水屏 天气 预报
  19. QFP PQFP LQFP TQFP封装形式及PCB详解!
  20. Qt QTableView焦点事件

热门文章

  1. SPR:SUPERVISED PERSONALIZED RANKING BASED ON PRIOR KNOWLEDGE FOR RECOMMENDATION
  2. 逻辑学在计算机科学的应用,逻辑学在计算机科学中的应用
  3. 64位处理器_计算机微处理器介绍
  4. 【高德地图API】申请key全流程
  5. c语言循环语句试讲教案,C语言For循环试讲教案(7页)-原创力文档
  6. Linux系统进程优化理论与方法
  7. 什么是EasyUI,如何使用EasyUI?--easyui的十二种用法
  8. 结构化、半结构化、非结构化数据
  9. HTML---基础篇
  10. HTML5期末大作业:仿悦世界游戏网站设计——仿悦世界游戏官网(6页) HTML+CSS+JavaScript web网页设计实例作业