一步步实现Android MQTT详细步骤,附工程文件

一步步实现Android MQTT详细步骤,附工程文件,第1张

一、lib下载

1,服务的lib
org.eclipse.paho.android.service-1.1.1.jar
2,客户端的lib
org.eclipse.paho.client.mqttv3-1.2.5.jar

二、新建Android Studio 项目

我是用的是 Android Studio4.1.1版本,如下图所示。
1,
2,新建一个Empty Activity
3,MQTTDemo 命名,点击完成。

3,把下载的lib库文件放在项目 C:\Users\Administrator\MQTTDEMO\app\libs 目录下面。
我的项目在C:\Users\Administrator\MQTTDEMO文件夹下面,根据实际情况选择文件夹。

4,添加为lib,右键单击文件,然后点击 Add As Library。

成功后的如图所示,左边出现一个三角形可以展开。

三、修改配置信息(非常重要配置错误无法实现)

1,在项目视图的情况下,修改 工程的 build.gradle,添加一句。
在工程build.gradle中,添加Paho仓库地址

        maven {
            url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
        }

结果如图所示

2,为了使App能够绑定到Paho Android Service,需要在AndroidManifest.xml中添加以下信息

    <!--权限-->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

声明以下服务:

<!-- Mqtt Service -->
<service android:name="org.eclipse.paho.android.service.MqttService">
</service>
四、绘制控件
由于各个项目所需要显示的结果不同,这个项目在画控件的方面仅仅只是给helloword 的id命名为 : txthello。

五,写代码

如下图所示,代码在我本机是调试好之后贴上来的,如果无法运行,则看下配置文件。
我会把整个项目打包上传。

package com.example.mqttdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

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;

public class MainActivity extends AppCompatActivity {
    private String string_IMEI_ID = "WPGMQTTDemo";
    private String host = "tcp://broker.emqx.io:1883";
    //    private String userName = "admin";
//    private String passWord = "public";
    private MqttClient mqttClient;//客户端
    private MqttConnectOptions options;//配置  保存控制客户端连接到服务器的方式的选项集。
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        textView = findViewById(R.id.txthello);

        //初始化MQTT服务器连接配置
        Initialization_MQTT();
        //连接MQTT服务器
        ConnMqttBroken(true);
    }

    /*  初始化配置Mqtt  */
    private void Initialization_MQTT() {
        try {
            //(1)主机地址(2)客户端ID,一般以客户端唯一标识符(不能够和其它客户端重名)(3)最后一个参数是指数据保存在内存(具体保存什么数据,以后再说,其实现在我也不是很确定)
            mqttClient = new MqttClient(host, string_IMEI_ID, new MemoryPersistence());
        } catch (MqttException e) {
            e.printStackTrace();
        }
        options = new MqttConnectOptions();//MQTT的连接设置
        options.setCleanSession(true);//设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
//        options.setUserName(userName);//设置连接的用户名(自己的服务器没有设置用户名)
//        options.setPassword(passWord.toCharArray());//设置连接的密码(自己的服务器没有设置密码)
        mqttClient.setCallback(new MqttCallback() {
            @Override//连接丢失后,会执行这里
            public void connectionLost(Throwable throwable) {


            }

            @Override//获取的消息会执行这里--arg0是主题,arg1是消息
            public void messageArrived(final String ssr, MqttMessage mqttMessage) throws Exception {
                final String mqtt_zhuti = ssr;//主题
                final String mqtt_message = mqttMessage.toString();//消息
                runOnUiThread(new Runnable() {//
                    public void run() {
                        Toast.makeText(getApplicationContext(), "主题:" + ssr + "消息:" + mqtt_message, Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override//订阅主题后会执行到这里
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {


            }
        });
    }

    //连接断开MQTT
    private void ConnMqttBroken(boolean bloConn) {
        // 必须开启新的线程执行
        new Thread(new Runnable() {
            @Override
            public void run() {
                if (bloConn) {
                    try {
                        if (mqttClient.isConnected() == false) {
                            mqttClient.connect(options);//连接服务器,连接不上会阻塞在这
                        }
                        Snackbar.make(textView, "连接成功!", Snackbar.LENGTH_SHORT).show();
                    } catch (MqttException e) {
                        e.printStackTrace();
                        Snackbar.make(textView, "连接失败!", Snackbar.LENGTH_SHORT).show();
                    }
                } else {
                    try {
                        if (mqttClient.isConnected()) {
                            mqttClient.disconnect();
                        }
                        Snackbar.make(textView, "断开成功!", Snackbar.LENGTH_SHORT).show();
                    } catch (MqttException e) {
                        e.printStackTrace();
                        Snackbar.make(textView, "断开失败!", Snackbar.LENGTH_SHORT).show();
                    }
                }
            }
        }).start();
    }
}

以上就是写一个Android MQTT的步骤。
如果喜欢,请关注我哦,会分享自己学习的过程。
安卓MQTT实现项目

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/989826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存