AndroidMQTT使⽤详解Android MQTT 使⽤详解
MQTT 使⽤
引⼊MQTT库
//MQTT
implementation ‘lipse.lipse.paho.client.mqttv3:1.1.0’implementation ‘lipse.lipse.paho.android.service:1.1.1’
MqttManager
public class MqttManager {
private static MqttManager mInstance = null;
/**
* Mqtt回调
*/
private MqttCallback mCallback;
/**
* Mqtt客户端
*/
private static MqttClient client;
/**
* Mqtt连接选项
*/
private MqttConnectOptions conOpt;
private MqttManager(){
mCallback =new MqttCallbackBus();
}
public static MqttManager getInstance(){
if(null == mInstance){
synchronized(MqttManager.class){
if(mInstance == null){
mInstance =new MqttManager();
}
}
}
return mInstance;
}
/
**
* 释放单例, 及其所引⽤的资源
*/
public static void release(){
try{
if(mInstance != null){
mInstance = null;
}
}catch(Exception e){
LogUtils.e("release : "+ e.toString());
}
}
/**
public void creatConnect(String clientId,String topicId){
LogUtils.i("clientId"+clientId);
// 获取默认的临时⽂件路径
String tmpDir = Property("pdir");
/*
* MqttDefaultFilePersistence:
* 将数据包保存到持久化⽂件中,
* 在数据发送过程中⽆论程序是否奔溃、⽹络好坏
* 只要发送的数据包客户端没有收到,
* 这个数据包会⼀直保存在⽂件中,
* 直到发送成功为⽌。
*/
// Mqtt的默认⽂件持久化
MqttDefaultFilePersistence dataStore =new MqttDefaultFilePersistence(tmpDir);
try{
// 构建包含连接参数的连接选择对象
conOpt =new MqttConnectOptions();
// 设置Mqtt版本
conOpt.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
// 设置清空Session,false表⽰服务器会保留客户端的连接记录,true表⽰每次以新的⾝份连接到服务器            conOpt.setCleanSession(false);//是否要保留连接记录?
// 设置账号
conOpt.setUserName(MQTTName);
// 设置密码
conOpt.CharArray());eclipse android
// 设置超时时间,单位:秒
conOpt.setConnectionTimeout(10);
// 设置会话⼼跳时间,单位为秒
// 客户端每隔120秒向服务端发送⼼跳包判断客户端是否在线
conOpt.setKeepAliveInterval(120);
// 客户端是否⾃动尝试重新连接到服务器
conOpt.setAutomaticReconnect(true);
/
/ 创建MQTT客户端
client =new MqttClient(MQTTURL, clientId, dataStore);
// 设置回调
client.setCallback(mCallback);
// 最后的遗⾔(连接断开时,发动"close"给订阅了topic该主题的⽤户告知连接已中断)
conOpt.setWill(topicId,"close".getBytes(),1,true);
// 连接
doConnect();
}catch(MqttException e){
LogUtils.e("creatConnect : "+ e.toString());
}
}
/**
* 建⽴连接
*/
public void doConnect(){
if(client != null){
try{
LogUtils.i("conOpt"+conOpt);
}catch(Exception e){
LogUtils.e("doConnect : "+ e.toString());
}
*
* @param topicName 主题名称
* @param qos      质量(0,1,2)
* @param payload  发送的内容
*/
public void publish(String topicName,int qos,byte[] payload){
if(client != null && client.isConnected()){
// 创建和配置⼀个消息
MqttMessage message =new MqttMessage(payload);
message.setPayload(payload);
message.setQos(qos);
try{
client.publish(topicName, message);
}catch(MqttException e){
LogUtils.e("publish : "+ e.toString());
}
}
}
public void publish(String topicName,int qos, String payload){
if(client != null && client.isConnected()){
// 创建和配置⼀个消息
MqttMessage message =new Bytes());            message.Bytes());
message.setQos(qos);
try{
client.publish(topicName, message);
}catch(MqttException e){
LogUtils.e("publish : "+ e.toString());
}
}
}
/**
* 订阅主题
*
* @param topicName 主题名称
* @param qos      消息质量
*/
public void subscribe(String topicName,int qos){
if(client != null && client.isConnected()){
try{
client.subscribe(topicName, qos);
}catch(MqttException e){
LogUtils.e("subscribe : "+ e.toString());
}
}
}
/**
* 取消订阅
*/
public void unsubscribe(String topicName){
if(client != null && client.isConnected()){
try{
client.unsubscribe(topicName);
}catch(MqttException e){
LogUtils.e("unsubscribe : "+ e.toString());
}
*/
public static void disConnect()throws MqttException {
if(client != null && client.isConnected()){
client.disconnect();
}
}
/**
* 判断是否连接
*/
public static boolean isConnected(){
return client != null && client.isConnected();
}
}
MqttCallbackBus
public class MqttCallbackBus implements MqttCallbackExtended {
// 可在此⽅法内写重连的逻辑
@Override
public void connectComplete(boolean reconnect, String serverURI){
LogUtils.i("connectComplete",reconnect);
if(reconnect){
//重连的逻辑
}
}
/**
* 连接中断
*/
@Override
public void connectionLost(Throwable cause){
LogUtils.e("连接中断: "+ String());
}
/**
* 消息送达
*/
@Override
public void messageArrived(String topic, MqttMessage message)throws Exception {        LogUtils.e("topic : "+ topic +"\t MqttMessage : "+ String());
//收到的消息处理
//Default().post(messageEvent);
}
/**
* 交互完成
*/
@Override
public void deliveryComplete(IMqttDeliveryToken token){
LogUtils.e("交互完成:"+ String());
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。