MQTT协议实现Android消息推送
来源:互联网 发布:linux系统自启动脚本 编辑:程序博客网 时间:2024/05/21 19:30
MQTT协议是订阅/发布协议,使用中间件将消息转发,中间件服务器有很多,这里我们使用mosquitto
1、下载安装mosquitto
双击安装程序,安装一般安装过程安装即可,安装完成后可以测试服务。
2、测试服务 简单使用mosquitto
2.1启动服务 打开命令行窗口,进入到mosquitto的安装目录,执行mosquitto.exe启动服务
2.2订阅主题 执行 mosquitto_sub -v -t test
【-t】指定主题,此处为test
【-v】打印更多的调试信息
2.3发布内容 另外打开一个命令行窗口 执行 mosquitto_pub -ttest -m helloworld
在发布窗口回车之后就会在订阅窗口接收到消息,sensor 12 这就是mosquitto的简单使用 【-t】指定主题 test
【-m】指定消息内容 helloworld
3.代码实现消息推送
在Android Studio中创建测试Module
导入jar包org.eclipse.paho.client.mqttv3-1.0.1.jar
创建布局文件,有两个按钮,一个发布一个接受,一个文本框填写发布内容
主要代码:
private EditText content; private MqttClient sampleClient = null; private String[] topicFilters = {"test1", "test2"};//发布或订阅主题,(我要发布或订阅什么消息) private String broker = "tcp://172.19.137.140:1883";//服务器地址及端口 就是自己的IP(我要去哪里订阅消息) private String clientId = "paho1352798577649702";//客户端ID 就是用这个来标识客户端在服务器上的唯一(是谁在服务器上发布或订阅消息) private MemoryPersistence persistence = new MemoryPersistence(); private MqttConnectOptions connOpts = new MqttConnectOptions();//连接配置 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button publish = (Button) findViewById(R.id.publish); Button receive = (Button) findViewById(R.id.receive); content = (EditText) findViewById(R.id.content); try { //创建客户端 sampleClient = new MqttClient(broker, clientId, persistence); connOpts.setCleanSession(false); //连接服务器 sampleClient.connect(connOpts); } catch (MqttException e) { e.printStackTrace(); } publish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //创建要发布的消息 MqttMessage message = new MqttMessage(content.getText().toString().trim().getBytes()); message.setQos(1); //发布消息 sampleClient.publish("test1", message); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); me.printStackTrace(); } } }); receive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //获取消息回调 sampleClient.setCallback(new MyCallBack()); //订阅消息 sampleClient.subscribe(topicFilters, new int[]{1, 1}); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); me.printStackTrace(); } } }); }
回调消息的处理: class MyCallBack implements MqttCallback{ @Override public void messageArrived(String arg0, MqttMessage arg1) throws Exception { System.out.println("MqttMessage:" + arg1.toString()); Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("content", arg1.toString()); message.setData(bundle); handler.sendMessage(message); } @Override public void deliveryComplete(IMqttDeliveryToken arg0) { } @Override public void connectionLost(Throwable arg0) { } }
详细代码
0 0
- 采用MQTT协议实现Android消息推送
- 用MQTT协议实现android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- Android 使用MQTT协议实现消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- MQTT协议实现Android消息推送
- (转)采用MQTT协议实现Android消息推送
- Linux shell脚本——if运算例子
- 将连接MySQL数据库的java项目程序打包成为.jar格式
- PendingInten
- 从类变量成员初始化顺序,理解java语法[1]
- three.js报错renderer.setClearColorHex is not a function
- MQTT协议实现Android消息推送
- Unity与Android交互
- Android使用Jenkins完成自动化打包操作---Jenkins的安装以及基础配置
- 一致性哈希与普通哈希对比
- 影像格式(Mat)
- HttpURLConnection 使用
- android架构封装(mvp + rxandroid + Retrofit2.0 )
- 【框架-MFC】调用dll中的对话框
- hibernate常见的面试题及答案