首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Android网络开发回顾之旅 ① 在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。(附带Demo)

  • 23-11-14 06:23
  • 2907
  • 7282
blog.csdn.net
  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

    • ① 对物联网爱不释手,在Android手机集成使用MQTT协议 ,实现搞掂移动控制硬件端。

    • ① 新年新气象,封装一个esp8266一键配网XSmartConfig , 支持自定义回调。


一、认识MQTT协议。


如果你对MQTT协议的连接过程不熟悉,那没关系;请看我前面的8266硬件上介绍的MQTT介绍 ,其实也没啥难,这个MQTT的好处是短小,信息传递快捷 ,适合在有限的空间的硬件的开发,比如8266 , 或者其他通讯模块。


描述MQTT


二、新建Android项目,集成MQTT的架包。


  • 我是用AndroidStudio工具开发的,所以集成比较简单,我也强烈推荐大家去使用AS 。

  • 第一步:找到eclipse下开源的项目,GitHub地址 ,因为AS是grdle来编译的,所以在您新建的工程下的build.gradle下的目录加进以下代码:
repositories {
    maven {
        url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述


  • 第二步:在你的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'
  • 1
  • 2

这里写图片描述


  • 第三步:在你的清单文件加上,MQTT所依赖的服务和权限:


  
    <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_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <service android:name="org.eclipse.paho.android.service.MqttService"/>      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里写图片描述


三、开始你的代码。


注意必须要初始化客户端,才可以订阅主题和发布消息操作!否则异常 !


  • ① 初始化客户端和连接选项。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) {

            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

  • ② 开始连接服务器,当然你可以不用监听,如果不抛出异常,也是连接成功啦!

如果您的服务器是没有账号密码登陆的话,那么可以不用第二个参数;
如果你的服务器是有账号密码的,请参考以下方法,中间传个 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();
            //连接失败
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

  • ③ 订阅信息!,主题是 /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();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

  • ④ 发布信息,主题是 /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("发布消息失败");
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

  • ⑤ 欣赏下;

  • 下载地址:http://download.csdn.net/download/xh870189248/10178871


这里写图片描述

注:本文转载自blog.csdn.net的半颗心脏的文章"http://blog.csdn.net/xh870189248/article/details/78925541"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top