帮助列表 |
1.库使用方式,以及引入地址使用文档 http://www.eclipse.org/paho/clients/android/
Android Gradle 集成: https://github.com/eclipse/paho.mqtt.android
repositories { maven { url "https://repo.eclipse.org/content/repositories/paho-releases/" } } dependencies { compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.0' }
2.ANDROID 权限设置:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <service android:name="org.eclipse.paho.android.service.MqttService" > </service> 设置再<application></application>里面
3.代码使用:
初始化
Context ctx; String clientId="自定义";//连接标示,同一个标示,用于2个连接,会踢掉对方。 String userContext;//任意字符串,自定义。 String addr = "tcp://mqttdms.aodianyun.com:1883"; MqttCallback callback; MqttAndroidClient cli_ = new MqttAndroidClient(ctx,addr,clientId); MqttConnectOptions opt_ = new MqttConnectOptions(); opt_.setCleanSession(true);//是否保持该clientid的session状态,以便断开后保存离线消息 opt_.setConnectionTimeout(5000);//连接超时 opt_.setKeepAliveInterval(60*1000);//心跳包检测间隔 opt_.setPassword(subKey.toCharArray());//dms 的SUBkey opt_.setUserName(pubKey);//dms的pubkey cli_.setCallback(callback);//消息的回调
回调函数详解:
MqttCallback{ connectionLost //链接断开 messageArrived //接收消息 deliveryComplete //异步发送成功回调 }
注明:
1、onnectionLost (Throwable throwable) //连接断开
网络状态不佳或被人挤下去都调用这个方法,主动断开不会调用此方法
此方法会给出一个异常 通过throwable.getMessage()可以获得造成连接失败的原因
页可以在这个回调里执行重新连接的逻辑
2、messageArrived (String topic, MqttMessage message)//接收消息
topic 指的是该消息是由哪个话题传过来的, 可以通过
String content = new String(message.getPayload()) 获取消息内容
3、deliveryComplete(IMqttDeliveryToken token) //异步发送成功回调
消息发送成功后回调,可以通过
String content = new String(token.getMessage().getPayload()) 获取发送的内容
连接服务器
IMqttActionListener connCallback; cli_.connect(opt_, userContext, connCallback);
下面系列操作都是建立在connect成功,以及链接未断开的情况下,才能成功。
关注话题:
IMqttActionListener subCallback; String topic; int qos;//取值 0 ,1 cli_.subscribe(topic,qos,userContext,subCallback);
推送消息:
IMqttActionListener pubCallback; String topic; int qos;//取值 0 ,1 byte[] payload = "要发送的内容".getBytes(Charset.defaultCharset()); cli_.publish(topic, payload,qos,false,userContext,pubCallback);
断开连接:
IMqttActionListener disCallback; cli_.disconnect(userContext,disCallback);