GitHub:

https://github.com/eclipse/paho.mqtt.android

Demo

package paho.mqtt.java.example;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import org.eclipse.paho.android.service.MqttAndroidClient;import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;import org.eclipse.paho.client.mqttv3.IMqttActionListener;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.paho.client.mqttv3.IMqttMessageListener;import org.eclipse.paho.client.mqttv3.IMqttToken;import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.MqttMessage;import java.util.ArrayList;public class PahoExampleActivity extends AppCompatActivity{    private HistoryAdapter mAdapter;    MqttAndroidClient mqttAndroidClient;    final String serverUri = "tcp://iot.eclipse.org:1883";    String clientId = "ExampleAndroidClient";    final String subscriptionTopic = "exampleAndroidTopic";    final String publishTopic = "exampleAndroidPublishTopic";    final String publishMessage = "Hello World!";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_scrolling);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                publishMessage();            }        });        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.history_recycler_view);        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(mLayoutManager);        mAdapter = new HistoryAdapter(new ArrayList<String>());        mRecyclerView.setAdapter(mAdapter);        clientId = clientId + System.currentTimeMillis();//创建mqtt客户端        mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), serverUri, clientId);        mqttAndroidClient.setCallback(new MqttCallbackExtended() {            @Override            public void connectComplete(boolean reconnect, String serverURI) {                if (reconnect) {                    addToHistory("Reconnected to : " + serverURI);                    // Because Clean Session is true, we need to re-subscribe                    subscribeToTopic();                } else {                    addToHistory("Connected to: " + serverURI);                }            }            @Override            public void connectionLost(Throwable cause) {                addToHistory("The Connection was lost.");            }//接收回调函数            @Override            public void messageArrived(String topic, MqttMessage message) throws Exception {                addToHistory("Incoming message: " + new String(message.getPayload()));            }            @Override            public void deliveryComplete(IMqttDeliveryToken token) {            }        });//设置连接参数        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();        mqttConnectOptions.setAutomaticReconnect(true);        mqttConnectOptions.setCleanSession(false);//连接mqtt服务器        try {            //addToHistory("Connecting to " + serverUri);            mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {                @Override                public void onSuccess(IMqttToken asyncActionToken) {                    DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();                    disconnectedBufferOptions.setBufferEnabled(true);                    disconnectedBufferOptions.setBufferSize(100);                    disconnectedBufferOptions.setPersistBuffer(false);                    disconnectedBufferOptions.setDeleteOldestMessages(false);                    mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);                    subscribeToTopic();                }                @Override                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {                    addToHistory("Failed to connect to: " + serverUri);                }            });        } catch (MqttException ex){            ex.printStackTrace();        }    }    private void addToHistory(String mainText){        System.out.println("LOG: " + mainText);        mAdapter.add(mainText);        Snackbar.make(findViewById(android.R.id.content), mainText, Snackbar.LENGTH_LONG)                .setAction("Action", null).show();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        return super.onOptionsItemSelected(item);    }//订阅主题    public void subscribeToTopic(){        try {            mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {                @Override                public void onSuccess(IMqttToken asyncActionToken) {                    addToHistory("Subscribed!");                }                @Override                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {                    addToHistory("Failed to subscribe");                }            });            // THIS DOES NOT WORK!            mqttAndroidClient.subscribe(subscriptionTopic, 0, new IMqttMessageListener() {                @Override                public void messageArrived(String topic, MqttMessage message) throws Exception {                    // message Arrived!                    System.out.println("Message: " + topic + " : " + new String(message.getPayload()));                }            });        } catch (MqttException ex){            System.err.println("Exception whilst subscribing");            ex.printStackTrace();        }    }//发布消息    public void publishMessage(){        try {            MqttMessage message = new MqttMessage();            message.setPayload(publishMessage.getBytes());            mqttAndroidClient.publish(publishTopic, message);            addToHistory("Message Published");            if(!mqttAndroidClient.isConnected()){                addToHistory(mqttAndroidClient.getBufferedMessageCount() + " messages in buffer.");            }        } catch (MqttException e) {            System.err.println("Error Publishing: " + e.getMessage());            e.printStackTrace();        }    }}

更多相关文章

  1. 手机客户端版csdn搜索
  2. Android(安卓)Auto-IP support
  3. android websocket推送
  4. android 代码连接 wifi
  5. android 联系人搜索
  6. Android(安卓)socket通信app Server端
  7. Android(安卓)socket通信app Client端
  8. Android(安卓)直接通过JNI访问驱动
  9. adb使用wifi无线连接调试Android设备

随机推荐

  1. 【Android】ListView与Button的共存问题
  2. ListActivity中android:id="@+id/android
  3. Android(安卓)可以自定义速度的跑马灯效
  4. Android的简介
  5. Android(安卓)2.2 demos -- Window Featu
  6. Android和Linux kernel发展史
  7. Android(安卓)Camera
  8. Android中线程同步之Mutex与Condtion的用
  9. Android(安卓)读取一个已经安装的包的权
  10. Android使用AIDL跨进程数据共享