说明
这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用
为避免重复内容,这一节利用上一节的工程作为这一节的工程
后面所说的当前工程即本节的工程.
打开上一节的工程,作为本节工程
打开基础篇第一节测试里面的APP源码里面的工程
拷贝MyMqttClient.java文件
一,拷贝第一节测试里面的APP源码里面的MyMqttClient.java 到当前工程
二,源码里面是使用的手机的IMEI作为了 MQTT的 ClientID
咱呢,这节着重介绍包的使用,所以这个地方咱直接用时间戳作为ClientID就可以了
连接MQTT
一,根据自己的MQTT服务器修改
二,控制连接
该代码写一次即可,后期断线自动重连
代码语言:javascript复制MyMqttClient.sharedCenter().setConnect();
订阅主题
代码语言:javascript复制MyMqttClient.sharedCenter().setSubscribe("1111",0);//订阅主题1111,消息等级0
建议使用定时器订阅
代码语言:javascript复制public class MainActivity extends AppCompatActivity {
//定时器用于轮训订阅主题
private Timer timerSubscribeTopic = null;
private TimerTask TimerTaskSubscribeTopic = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyMqttClient.sharedCenter().setConnect();//连接MQTT
/**
* 订阅主题成功回调
*/
MyMqttClient.sharedCenter().setOnServerSubscribeCallback(new MyMqttClient.OnServerSubscribeSuccessCallback() {
@Override
public void callback(String Topic, int qos) {
if (Topic.equals("1111")){//订阅1111成功
stopTimerSubscribeTopic();//订阅到主题,停止订阅
}
}
});
startTimerSubscribeTopic();//定时订阅主题
}
/**
* 定时器每隔1S尝试订阅主题
*/
private void startTimerSubscribeTopic(){
if (timerSubscribeTopic == null) {
timerSubscribeTopic = new Timer();
}
if (TimerTaskSubscribeTopic == null) {
TimerTaskSubscribeTopic = new TimerTask() {
@Override
public void run() {
MyMqttClient.sharedCenter().setSubscribe("1111",0);//订阅主题1111,消息等级0
}
};
}
if(timerSubscribeTopic != null && TimerTaskSubscribeTopic != null )
timerSubscribeTopic.schedule(TimerTaskSubscribeTopic, 0, 1000);
}
private void stopTimerSubscribeTopic(){
if (timerSubscribeTopic != null) {
timerSubscribeTopic.cancel();
timerSubscribeTopic = null;
}
if (TimerTaskSubscribeTopic != null) {
TimerTaskSubscribeTopic.cancel();
TimerTaskSubscribeTopic = null;
}
}
//当活动不再可见时调用
@Override
protected void onStop()
{
super.onStop();
stopTimerSubscribeTopic();//停止定时器订阅
}
}
取消订阅
接收消息
代码语言:javascript复制 MyMqttClient.sharedCenter().setOnServerReadStringCallback(new MyMqttClient.OnServerReadStringCallback() {
@Override//Topic:主题 Msg.toString():接收的消息 MsgByte:16进制消息
public void callback(String Topic, MqttMessage Msg, byte[] MsgByte) {
Log.e("MqttMsg", "Topic: " Topic " Msg" Msg.toString() );
}
});
发布消息
一,发送字符串
二,发送16进制