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

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

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

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


一、认识MQTT协议。


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


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


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


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

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

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


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

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


  • 第三步:在你的清单文件加上,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"/>      

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


三、开始你的代码。


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


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


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

你可能感兴趣的:(安卓通讯)