要将Android传感器数据发布到云,并使用发布/订阅模式,可以使用以下步骤和代码示例:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
import android.content.Context;
import android.util.Log;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.IMqttToken;
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.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class MqttHelper {
private static final String TAG = MqttHelper.class.getSimpleName();
private MqttAndroidClient mqttAndroidClient;
private String serverUri = "tcp://mqtt.example.com:1883";
private String clientId = MqttClient.generateClientId();
public MqttHelper(Context context) {
mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId);
mqttAndroidClient.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
Log.d(TAG, "Connection lost");
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// 处理接收到的消息
Log.d(TAG, "Received message: " + new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
Log.d(TAG, "Delivery complete");
}
});
}
public void connect() {
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
try {
mqttAndroidClient.connect(options, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
Log.d(TAG, "Connected to MQTT server");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Log.d(TAG, "Failed to connect to MQTT server");
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
mqttAndroidClient.disconnect();
} catch (MqttException e) {
e.printStackTrace();
}
}
public void publish(String topic, String payload) {
try {
MqttMessage message = new MqttMessage();
message.setPayload(payload.getBytes());
mqttAndroidClient.publish(topic, message);
} catch (MqttException e) {
e.printStackTrace();
}
}
public void subscribe(String topic) {
try {
mqttAndroidClient.subscribe(topic, 0);
} catch (MqttException e) {
e.printStackTrace();
}
}
public void unsubscribe(String topic) {
try {
mqttAndroidClient.unsubscribe(topic);
} catch (MqttException e) {
e.printStackTrace();
}
}
}
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TOPIC = "sensor_data";
private MqttHelper mqttHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mqttHelper = new MqttHelper(this);
mqttHelper.connect();
Button publishButton = findViewById(R.id.publish_button);
publishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick