1,服务的lib
org.eclipse.paho.android.service-1.1.1.jar
2,客户端的lib
org.eclipse.paho.client.mqttv3-1.2.5.jar
我是用的是 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实现项目
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)