制作一个基于MQTT协议简易的网络调试助手(AndroidStudio编译)

本文档指导如何使用Android Studio构建一个基于MQTT协议的网络调试应用。首先,介绍了添加MQTT库到项目的步骤,包括在gradle文件中配置依赖。接着,详细讲述了创建布局文件和编写Java代码的过程,包括启动客户端、处理用户交互如订阅、取消订阅、发布消息等事件。最后,提到了处理返回键双击以防止意外退出,并提供了源代码供参考。
摘要由CSDN通过智能技术生成

制作一个基于MQTT协议简易的网络调试助手(AndroidStudio编译)

MQTT库在GitHub的地址:https://github.com/eclipse/paho.mqtt.android.git


添加MQTT库

第一步:找到项目目录下的gradle文件,添加以下代码

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

第二步:在APP模块下的gradle文件下添加以下代码

dependencies {
   
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}

第三步:在AndroidManifest.xml文件加上MQTT所依赖的服务和权限: 添加服务

<service android:name="org.eclipse.paho.android.service.MqttService"/>

添加权限

<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" />
第四步,将MQTT库源文件中的org.eclipse.paho.android.service文件夹复制进你的项目文件夹根目录

开始你的代码

一、建立布局

1、在layout文件夹下建立名为mqtttest的布局文件,将各个控件拖入并命名如下:

mqtttest

需要注意的是,布局中除了启动客户端的Button以外,其余控件都设可视性设为不可视(在每个控件的代码处加上android:visibility=“invisible”)

2、在layout文件夹下新建xml文件,命名为dialog,布局如下(注意,必须使用LinearLayout布局):

dialog

二、编写java文件

本文章将按照实现单击按钮事件的顺序来编写,流程图如下

Created with Raphaël 2.2.0 打开APP 启动并登录 连接成功? 订阅或发布 定阅或发布成功 成功 yes no yes no
1、启动客户端的单击事件
public void start1(){
   
        if(num == 0) {
   
            // 创建对话框构建器
            AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
            // 获取布局
            View view1 = View.inflate(MQTTtest.this, R.layout.dialog, null);
            // 获取布局中的控件
            final EditText editText_ip = (EditText) view1.findViewById(R.id.ip);
            final EditText editText_port = (EditText) view1.findViewById(R.id.port);
            final Button cancel = (Button) view1.findViewById(R.id.cancel);
            final EditText username = (EditText) view1.findViewById(R.id.user);
            final EditText password = (EditText) view1.findViewById(R.id.password);
            final Button login = (Button) view1.findViewById(R.id.login);
            // 设置参数
            builder.setTitle("LOGIN").setView(view1);
            // 创建对话框
            final AlertDialog alertDialog = builder.create();
            alertDialog.show();

            cancel.setOnClickListener(new View.OnClickListener() {
   
                @Override
                public void onClick(View view) {
   
                    alertDialog.dismiss();
                    Toast.makeText(MQTTtest.this, "取消连接服务器", Toast.LENGTH_SHORT).show();
                }
            });

            login.setOnClickListener(new View.OnClickListener() {
   
                @Override
                public void onClick(View view) {
   
                    ip = editText_ip.getText().toString().trim();
                    port = editText_port.getText().toString().trim();
                    uname = username.getText().toString().trim();
                    psd = password.getText().toString().trim();
                    connect();
                    alertDialog.dismiss();
                    Toast.makeText(MQTTtest.this, "尝试连接", Toast.LENGTH_SHORT).show();

                    num = num + 1;
                    start.setVisibility(View.INVISIBLE);
                    progressBar.setVisibility(View.VISIBLE);
                }
            });
        }else {
   
            connectServer();
            start.setVisibility(View.INVISIBLE);
            progressBar.setVisibility(View.VISIBLE);
        }

    }
2、dialog界面login按钮对应的单击事件
private void connect() {
   
        //第一个参数上下文,第二个服务器地址,注意下面的格式!!!! 第三个是 客户端ID,注意 必须唯一,如果存在此ID连接了服务器。那么连接失败!
        client = new MqttAndroidClient(this, "tcp://"+ip+":"+port,AndroidID);

        //配置连接信息
        mqttConnectOptions=new MqttConnectOptions();
        //是否清除缓存
        mqttConnectOptions.setCleanSession(true);
        //是否重连
        mqttConnectOptions.setAutomaticReconnect(true);
        //设置心跳,30s
        mqttConnectOptions.setKeepAliveInterval(30);
        if(!uname.equals("")&&!psd.equals("")){
   
            //登陆的名字,根据服务器要求,一般不用写
            mqttConnectOptions.setUserName(uname);
            //登陆的密码,
            mqttConnectOptions.setPassword(psd.toCharArray());
        }
        //超时时间
        mqttConnectOptions.setConnectionTimeout
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值