1、客户端锁屏状态,无法发送心跳包
解决方案:使用电源锁
客户端:MqttService
/**
* 设备电源锁。
*/
private PowerManager.WakeLock mWakeLock;
/**
* 申请设备电源锁
*/
private final void acquireWakeLock() {
if (mWakeLock == null) {
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getPackageName());
}
if (mWakeLock != null) {
mWakeLock.acquire();
}
}
/**
* 释放设备电源锁
*/
private final void releaseWakeLock() {
if (mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//申请电源锁
acquireWakeLock();
//创建mqtt连接
if(mqttClient != null && mqttClient.isConnected()) {
} else {
util = CommonUtil.getInstance(MqttService.this);
CLIENT_ID = "uniware" + util.getInt("USER_ID", -1);
notiId = new Random().nextInt(100000);
TOPICS = new String[]{CLIENT_ID};
// 创建MqttClient对象
try {
mqttClient = new MqttClient(HandleAddress.CONNECTION_STRING);
mqttClient.registerAdvancedHandler(new AdvancedCallbackHandler());// 注册接收消息方法
} catch (MqttException e) {
e.printStackTrace();
}
new Thread(conn).start();
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
//关闭mqtt连接
conn.interrupt();
try {
mqttClient.unsubscribe(TOPICS);
} catch (MqttNotConnectedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MqttException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mqttClient.disconnect();
} catch (MqttPersistenceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//释放电源锁
releaseWakeLock();
super.onDestroy();
Log.d(TAG, "onDestroy() executed");
}