栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

安卓写Mqtt(java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓写Mqtt(java)

前置
  1. 在setting.gradle里面添加

    maven { url ‘https://jitpack.io’ }
    maven { url ‘https://repo.eclipse.org/content/repositories/paho-releases/’}
    
    pluginManagement {
        repositories {
            gradlePluginPortal()
            google()
            mavenCentral()
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            google()
            mavenCentral()
            maven { url 'https://jitpack.io' }
            maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/'}
        }
    }
    rootProject.name = "My Application"
    include ':app'
    
  2. 添加库

    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.0'
    
  3. 添加服务

     //自带服务
    
代码

main

    package com.example.myapplication;
    import androidx.appcompat.app.AppCompatActivity;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    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;
    import org.json.JSONObject;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;

    public class MainActivity extends Activity {


     private Handler handler;
     private MqttClient client;
     private MqttConnectOptions options;
     private ScheduledExecutorService scheduler;

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

         EditText publishTopic = findViewById(R.id.publish_topic);
         EditText subscribeTopic = findViewById(R.id.subscribe_topic);
         EditText publishMessage = findViewById(R.id.publish_content);
         EditText subscribeMessage = findViewById(R.id.subscribe_content);
         Button connectServer = findViewById(R.id.connectServer);
         Button publishButton = findViewById(R.id.publish);
         Button subscribeButton = findViewById(R.id.subscribe);

         MqttUtils mqttUtils = new MqttUtils();
         mqttUtils.subscribeMsgEdit = subscribeMessage;
         connectServer.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 mqttUtils.init();
                 mqttUtils.Mqtt_connect();
             }
         });

         publishButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 String topic = publishTopic.getText().toString();
                 String message = publishMessage.getText().toString();
                 mqttUtils.mqtt_pub_topic = topic;
                 mqttUtils.publishmessageplus(message);
             }
         });

         subscribeButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 mqttUtils.mqtt_sub_topic= subscribeTopic.getText().toString();
                 mqttUtils.sub();

             }
         });


     }


 }

util

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class MqttUtils  {

    MqttUtils(){
        this.host = "tcp://47.109.46.65:1883";
        this.mqtt_id = "kafens_phone";
        this.userName = "kafen";
        this.passWord = "kafen";

    }

    public String host ;
    public String mqtt_id ;
    public String userName ;
    public String passWord ;
    public MqttClient client;
    public String mqtt_sub_topic = "my_sub";
    public String mqtt_pub_topic ="my_pub";
    public String subscribeMsg;
    public MqttConnectOptions options;
    public ScheduledExecutorService scheduler;
    public EditText subscribeMsgEdit;


    public void init() {
        try {
            client = new MqttClient(host, mqtt_id, new MemoryPersistence());
            options = new MqttConnectOptions();
            options.setCleanSession(true);
            options.setUserName(userName);
            options.setPassword(passWord.toCharArray());
            options.setConnectionTimeout(10);
            options.setKeepAliveInterval(20);
            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable cause) {
                    System.out.println("connectionLost----------");
                }
                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("deliveryComplete---------" + token.isComplete());
                }

                @Override
                public void messageArrived(String topicName, MqttMessage message) {
                    subscribeMsg =  message.toString();
                    handler.sendEmptyMessage(3);

                }
            });
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }



    Handler handler = new Handler() {

        @SuppressLint("SetTextIl8n")
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1: //开机校验更新回传
                    break;
                case 2: //反馈回转
                    break;
                case 3: //MQTT收到消息回传
                    subscribeMsgEdit.setText(subscribeMsg);
                    break;

                case 30: //连接失败
                     // Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show();
                    System.out.println("connect failed");
                    break;
                case 31: //连接成功
                    // Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();

                    break;
                case 92:
                    try {
                        client.subscribe(mqtt_sub_topic, 2);
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                    break;
                default:
                    break;
            }
        }
    };


    public void Mqtt_connect() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if (!( client.isConnected())){
                        client.connect(options);
                        Message msg = new Message();
                        msg.what=31;

                        handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Message msg = new Message();
                    msg.what = 30;
                    handler.sendMessage(msg);
                }
            }
        }).start();

    }


    public void startReconnect() {
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                if (!client.isConnected()) {
                    Mqtt_connect();
                }
            }
        }, 0 * 1000, 10 * 1000, TimeUnit.MILLISECONDS);
    }


    public void publishmessageplus(String message2)
    {
        if (client == null || !client.isConnected()){
           return;
        }
        MqttMessage message = new MqttMessage();
        message.setPayload(message2.getBytes());
        try {
            client.publish(mqtt_pub_topic,message);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }


public  void sub()  {
    try {
        client.subscribe(mqtt_sub_topic, 2);
    } catch (MqttException e) {
        e.printStackTrace();
    }
}




}

xml




    

    

    

    


    
工程下载

gitee下载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号