一、
/*******************************************************************/
public static final String HOST = "tcp://XXX.xxx.xxx:1883";
public static final String TOPIC = "zzzclient/125";//订阅主题,很关键,发布订阅跟这个有比联关系
//public static final String TOPIC = "device_ACCF23B49618";
private static final String clientid = "client125";
private MqttClient client;
private MqttConnectOptions options;
private String userName = "root";
private String passWord = "xxxxx";
/*******************************************************************/
public void start() {
try {
// host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
client = new MqttClient(HOST, clientid, new MemoryPersistence());
// MQTT的连接设置
options = new MqttConnectOptions();
// 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
options.setCleanSession(true);
// 设置连接的用户名
options.setUserName(userName);
// 设置连接的密码
options.setPassword(passWord.toCharArray());
// 设置超时时间 单位为秒
options.setConnectionTimeout(10);
// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
options.setKeepAliveInterval(20);
// 设置回调
//client.setCallback(new PushCallback());
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
// 连接丢失后,一般在这里面进行重连
/*try {
client.connect(options);
//订阅消息
int[] Qos = {1};
String[] topic1 = {TOPIC};
client.subscribe(topic1, Qos);
} catch (MqttException e) {
e.printStackTrace();
}*/
System.out.println("zfr-连接断开,可以做重连");
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println("zfr-接收消息主题 : " + topic);
System.out.println("zfr-接收消息Qos : " + message.getQos());
System.out.println("zfr-接收消息内容 : " + new String(message.getPayload()));
if (0 == message.getQos()) {
final String dateTime = Device.getDateTime();
final String mqttMsg = new String(message.getPayload());
if("".equals(mqttMsg)){
return;
}
/*handler.post(new Runnable() {
@Override
public void run() {
btn_speak.performClick(); //调用 button2的点击事件
}
});*/
/*handlerMQTT.postDelayed(new Runnable() {
@Override
public void run() {
btn_speak.performClick();
}
}, 3000);*/
/*int printFlag = print(" 交易凭单" + "\n" + "商户编号:898650170110218" + "\n" + "终端编号:65546881" + "\n" + "金额:" + Utils.FormatAmount(mqttMsg) + "元" + "\n" + "交易时间:" + dateTime + "\n\n\n\n\n\n");
Log.d("zfr-printFlag===", printFlag + "");
if (printFlag == 0) {
handlerMQTT.post(new Runnable() {
@Override
public void run() {
if (textToSpeech != null && !textToSpeech.isSpeaking()) {
Log.d("zfr-声音:", "00000");
textToSpeech.setPitch(0.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
//textToSpeech.speak("收款" + Utils.FormatAmount(mqttMsg) + "元", TextToSpeech.QUEUE_FLUSH, null);
textToSpeech.speak("元圆圆圆园园", TextToSpeech.QUEUE_ADD, null);
} else {
Log.d("zfr-声音:", "111111");
}
}
});
}*/
/*new Thread(new Runnable() {
@Override
public void run() {
if (textToSpeech != null && !textToSpeech.isSpeaking()) {
Log.d("zfr-声音:", "00000");
textToSpeech.setPitch(0.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
//textToSpeech.speak("收款" + Utils.FormatAmount(mqttMsg) + "元", TextToSpeech.QUEUE_FLUSH, null);
textToSpeech.speak("元圆圆圆园园", TextToSpeech.QUEUE_FLUSH, null);
} else {
Log.d("zfr-声音:", "111111");
}
print(" 交易凭单" + "\n" + "商户编号:898650170110218" + "\n" + "终端编号:65546881" + "\n" + "金额:" + Utils.FormatAmount(mqttMsg) + "元" + "\n" + "交易时间:" + dateTime + "\n\n\n\n\n\n");
}
}).start();*/
//新增一个界面用来显示信息
Intent intent = new Intent(MainActivity.this, MQTTActivity.class);
intent.putExtra("mqttMsg", new String(message.getPayload()));
startActivity(intent);
} else {
//Toast.makeText(MainActivity.this,new String(message.getPayload()),Toast.LENGTH_SHORT);
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("zfr-deliveryComplete---------" + token.isComplete());
}
});
MqttTopic topic = client.getTopic(TOPIC);
//setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
options.setWill(topic, "close".getBytes(), 2, true);
client.connect(options);
//订阅消息
int[] Qos = {1};
String[] topic1 = {TOPIC};
client.subscribe(topic1, Qos);
} catch (Exception e) {
e.printStackTrace();
}
}
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~