社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
如果你对MQTT协议的连接过程不熟悉,那没关系;请看我前面的8266硬件上介绍的MQTT介绍 ,其实也没啥难,这个MQTT的好处是短小,信息传递快捷 ,适合在有限的空间的硬件的开发,比如8266 , 或者其他通讯模块。
repositories {
maven {
url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
}
}
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
<!-- Permissions the Application Requires -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--<uses-permission android:name="android.permission.READ_PHONE_STATE" />-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<service android:name="org.eclipse.paho.android.service.MqttService"/>
注意必须要初始化客户端,才可以订阅主题和发布消息操作!否则异常 !
//客户端
private MqttAndroidClient client;
//连接选项
private MqttConnectOptions mqttConnectOptions;
//第一个参数上下文,第二个服务器地址,注意下面的格式!!!! 第三个是 客户端ID,注意 必须唯一,如果存在此ID连接了服务器。那么连接失败!
client = new MqttAndroidClient(this, "tcp://iot.eclipse.org:1883", "androidID");
//配置连接信息
mqttConnectOptions=new MqttConnectOptions();
//是否清除缓存
mqttConnectOptions.setCleanSession(true);
//是否重连
mqttConnectOptions.setAutomaticReconnect(true);
//设置心跳,30s
mqttConnectOptions.setKeepAliveInterval(30);
//登陆的名字,根据服务器要求,一般不用写
mqttConnectOptions.setUserName("xuhong");
//登陆的密码,
mqttConnectOptions.setPassword("123545".toCharArray());
//超时时间
mqttConnectOptions.setConnectionTimeout(30);
//监听服务器发来的 信息
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
//连接丢失异常
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
//收到服务器的信息
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
});
如果您的服务器是没有账号密码登陆的话,那么可以不用第二个参数;
如果你的服务器是有账号密码的,请参考以下方法,中间传个 null ,切记切记 !本工程的下载的Demo是没有的!
//开始连接服务器
try {
client.connect(mqttConnectOptions, null , new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
//连接成功
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
//连接失败
}
});
} catch (MqttException e) {
e.printStackTrace();
//连接失败
}
try {
client.subscribe("/xuhong", 0, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
tvShow.setText("订阅成功!");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
tvShow.setText("订阅失败!" + exception);
}
});
} catch (MqttException e) {
e.printStackTrace();
}
MqttMessage mqttMessage = new MqttMessage();
mqttMessage.setPayload("hello xuhong".getBytes());
try {
client.publish("/xuhong", mqttMessage, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
tvShow.setText("发布消息成功");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
tvShow.setText("发布消息失败");
}
});
} catch (MqttException e) {
e.printStackTrace();
tvShow.setText("发布消息失败");
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!