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中增加

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

步骤3:前台代码(layout.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:后台代码

 
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();
 
});
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;
		}
	}
};

发表评论

称呼 *
联系方式 * 方便与您联系,不会对外显示。
内容
验证码