Android 发送MQTT消息

现在物联网很多都是使用的MQTT消息,在手机和设备之间通过MQTT协议通信,Android发送MQTT消息就会用得比较多。

步骤1:添加依赖库

你需要在你的build.gradle文件中添加MQTT客户端库。一个常用的库是Eclipse Paho,你可以这样添加依赖:

dependencies {
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
}

步骤2:设置网络权限

在AndroidManifest.xml中增加:

XML 复制代码
<!--网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

步骤3:前台代码(layout.xml)

在视图文件中增加按钮。

XML 复制代码
<LinearLayout
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:gravity="center_horizontal"
	android:orientation="horizontal">
	<Button
		android:id="@+id/btnTest"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_marginTop="10dp"
		android:text="测试"
		android:textAlignment="center" />
</LinearLayout>

步骤4:后台代码

java 复制代码
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;

... ...

btnTest.setOnClickListener(view -> {

	new Thread(() -> {
		String context = "tcp://broker.emqx.io:1883";
		String clientId = "mqttx_20240804-android";
		String username = "username";
		String password = "password";
		String topic = "mqttx_20240804";
		try {
			MqttClient client = new MqttClient(context, clientId, new MemoryPersistence());
			MqttConnectOptions options = new MqttConnectOptions();
			options.setCleanSession(true);
			options.setUserName(username);
			options.setPassword(password.toCharArray());
			client.connect(options);

			String action =  "hello"; 
			MqttMessage message = new MqttMessage(action.getBytes());
			message.setQos(0);
			client.publish(topic, message);

			Message handlerMsg = new Message();
			handlerMsg.what = 1;
			handlerMsg.obj = action;
			handler.sendMessage(handlerMsg);

		} catch (MqttException e) {
			Message message = new Message();
			message.what = 2;
			message.obj = e.getMessage();
			handler.sendMessage(message);
		}
	}).start();

});
java 复制代码
public Handler handler = new Handler() {
	@SuppressLint("HandlerLeak")
	@Override
	public void handleMessage(Message msg) {
		String text = msg.obj.toString(); 
		switch (msg.what) {
			case 1:
				Toast.makeText(ConfigActivity.this, "发送成功", Toast.LENGTH_SHORT).show();
				break;
			case 2:
				Toast.makeText(ConfigActivity.this, "抱歉,发送异常:" + text, Toast.LENGTH_SHORT).show();
				break;
		}
	}
};
相关推荐
水瓶丫头站住16 分钟前
安卓APP如何适配不同的手机分辨率
android·智能手机
xvch1 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch5 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
望风的懒蜗牛5 小时前
编译Android平台使用的FFmpeg库
android
浩宇软件开发5 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er88886 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php
苏金标7 小时前
The maximum compatible Gradle JVM version is 17.
android
zhangphil7 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin
iofomo11 小时前
Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。
android
我叫特踏实12 小时前
SensorManager开发参考
android·sensormanager