Android网络开发回顾之旅 ① 在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。(附带Demo)
2017-12-28 19:27
956 查看
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
① 对物联网爱不释手,在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。
① 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。
第一步:找到eclipse下开源的项目,GitHub地址 ,因为AS是grdle来编译的,所以在您新建的工程下的build.gradle下的目录加进以下代码:
第二步:在你的APP的模块下的build.gradle ,添加依赖 ,目前最新版3.1.1:
第三步:在你的清单文件加上,MQTT所依赖的服务和权限:
① 初始化客户端和连接选项。MqttAndroidClient 类是整个连接的核心 , 而MqttConnectOptions 是连接的选项配置。
② 开始连接服务器,当然你可以不用监听,如果不抛出异常,也是连接成功啦!
如果您的服务器是没有账号密码登陆的话,那么可以不用第二个参数;
如果你的服务器是有账号密码的,请参考以下方法,中间传个 null ,切记切记 !本工程的下载的Demo是没有的!
③ 订阅信息!,主题是 /xuhong , 质量是0 。
④ 发布信息,主题是 /xuhong ,质量是0信息是 hello xuhong 。
⑤ 欣赏下;
下载地址:http://download.csdn.net/download/xh870189248/10178871
① 对物联网爱不释手,在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。
① 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。
一、认识MQTT协议。
如果你对MQTT协议的连接过程不熟悉,那没关系;请看我前面的8266硬件上介绍的MQTT介绍 ,其实也没啥难,这个MQTT的好处是短小,信息传递快捷 ,适合在有限的空间的硬件的开发,比如8266 , 或者其他通讯模块。二、新建Android项目,集成MQTT的架包。
我是用AndroidStudio工具开发的,所以集成比较简单,我也强烈推荐大家去使用AS 。第一步:找到eclipse下开源的项目,GitHub地址 ,因为AS是grdle来编译的,所以在您新建的工程下的build.gradle下的目录加进以下代码:
repositories { maven { url "https://repo.eclipse.org/content/repositories/paho-snapshots/" } }
第二步:在你的APP的模块下的build.gradle ,添加依赖 ,目前最新版3.1.1:
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
第三步:在你的清单文件加上,MQTT所依赖的服务和权限:
<!-- Permissions the Application Requires --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--<uses-permission android:name="android.permission.READ_PHONE_STATE" />--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <service android:name="org.eclipse.paho.android.service.MqttService"/>
三、开始你的代码。
注意必须要初始化客户端,才可以订阅主题和发布消息操作!否则异常 !① 初始化客户端和连接选项。MqttAndroidClient 类是整个连接的核心 , 而MqttConnectOptions 是连接的选项配置。
//客户端 private MqttAndroidClient client; //连接选项 private MqttConnectOptions mqttConnectOptions; //第一个参数上下文,第二个服务器地址,注意下面的格式!!!! 第三个是 客户端ID,注意 必须唯一,如果存在此ID连接了服务器。那么连接失败! client = new MqttAndroidClient(this, "tcp://iot.eclipse.org:1883", "androidID"); //配置连接信息 mqttConnectOptions=new MqttConnectOptions(); //是否清除缓存 mqttConnectOptions.setCleanSession(true); //是否重连 mqttConnectOptions.setAutomaticReconnect(true); //设置心跳,30s mqttConnectOptions.setKeepAliveInterval(30); //登陆的名字,根据服务器要求,一般不用写 mqttConnectOptions.setUserName("xuhong"); //登陆的密码, mqttConnectOptions.setPassword("123545".toCharArray()); //超时时间 mqttConnectOptions.setConnectionTimeout(30); //监听服务器发来的 信息 client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { //连接丢失异常 } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { //收到服务器的信息 } @Override public void deliveryComplete(IMqttDeliveryToken token) { } });
② 开始连接服务器,当然你可以不用监听,如果不抛出异常,也是连接成功啦!
如果您的服务器是没有账号密码登陆的话,那么可以不用第二个参数;
如果你的服务器是有账号密码的,请参考以下方法,中间传个 null ,切记切记 !本工程的下载的Demo是没有的!
//开始连接服务器 try { client.connect(mqttConnectOptions, null , new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { //连接成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { //连接失败 } }); } catch (MqttException e) { e.printStackTrace(); //连接失败 }
③ 订阅信息!,主题是 /xuhong , 质量是0 。
try { client.subscribe("/xuhong", 0, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { tvShow.setText("订阅成功!"); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { tvShow.setText("订阅失败!" + exception); } }); } catch (MqttException e) { e.printStackTrace(); }
④ 发布信息,主题是 /xuhong ,质量是0信息是 hello xuhong 。
MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setPayload("hello xuhong".getBytes()); try { client.publish("/xuhong", mqttMessage, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { tvShow.setText("发布消息成功"); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { tvShow.setText("发布消息失败"); } }); } catch (MqttException e) { e.printStackTrace(); tvShow.setText("发布消息失败"); }
⑤ 欣赏下;
下载地址:http://download.csdn.net/download/xh870189248/10178871
相关文章推荐
- Esp8266学习之旅13 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。(附带demo)
- Android开发之利用MQTT协议实现消息的即时推送
- Android开发之控制手机振动(Vibrator的使用)
- [置顶] Android移动开发-在Android项目里集成调用微信支付开发的实现
- 在Android手机上支持消息传输协议(MQTT) Demo
- Android网络开发回顾之旅 ② 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。(附带Demo)
- Android开发之利用MQTT协议实现消息的即时推送
- Android手机开发 使用线性布局和相对布局实现Button垂直水平居中
- [置顶] Android移动开发-在Android项目里集成face++人脸识别的实现
- 在Android手机上支持消息传输协议(MQTT) Demo
- Android移动开发-在Android应用里集成QQ分享的实现
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制
- iPhone开发之UIScrollView滚动组件的使用(二) 拖线实现按钮控制大图移动利用contentOffset属性
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- Android开发之利用MQTT协议实现消息的即时推送
- [置顶] Android移动开发-在Android项目里集成讯飞语音识别与合成的实现
- [置顶] Android移动开发-在Android项目里集成开源框架ZXing实现扫描二维码的功能
- Android开发之利用MQTT协议实现消息的即时推送
- Android开发之利用MQTT协议实现消息的即时推送