{"id":150,"date":"2015-06-29T02:41:56","date_gmt":"2015-06-28T18:41:56","guid":{"rendered":"http:\/\/www.lixiaodong.com\/?p=150"},"modified":"2025-03-06T11:04:57","modified_gmt":"2025-03-06T03:04:57","slug":"android%e4%bd%bf%e7%94%a8paho%e8%bf%9b%e8%a1%8cmqtt%e5%8d%8f%e8%ae%ae%e6%b6%88%e6%81%af%e6%8e%a8%e9%80%81demo","status":"publish","type":"post","link":"https:\/\/www.lixiaodong.com\/?p=150","title":{"rendered":"android\u4f7f\u7528paho\u8fdb\u884cMQTT\u534f\u8bae\u6d88\u606f\u63a8\u9001Demo"},"content":{"rendered":"<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\npackage com.example.myapplication;\r\n\r\nimport android.support.v7.app.ActionBarActivity;\r\nimport android.os.Bundle;\r\nimport android.view.Menu;\r\nimport android.view.MenuItem;\r\nimport android.view.View;\r\nimport android.widget.EditText;\r\nimport android.widget.Toast;\r\n\r\nimport org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;\r\nimport org.eclipse.paho.client.mqttv3.MqttCallback;\r\nimport org.eclipse.paho.client.mqttv3.MqttClient;\r\nimport org.eclipse.paho.client.mqttv3.MqttConnectOptions;\r\nimport org.eclipse.paho.client.mqttv3.MqttMessage;\r\nimport org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;\r\n\r\npublic class MainActivity extends ActionBarActivity  implements MqttCallback{\r\n\r\n    private MqttClient mqttClient;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n    }\r\n\r\n    @Override\r\n    public boolean onCreateOptionsMenu(Menu menu) {\r\n        \/\/ Inflate the menu; this adds items to the action bar if it is present.\r\n        getMenuInflater().inflate(R.menu.menu_main, menu);\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public boolean onOptionsItemSelected(MenuItem item) {\r\n        \/\/ Handle action bar item clicks here. The action bar will\r\n        \/\/ automatically handle clicks on the Home\/Up button, so long\r\n        \/\/ as you specify a parent activity in AndroidManifest.xml.\r\n        int id = item.getItemId();\r\n\r\n        \/\/noinspection SimplifiableIfStatement\r\n        if (id == R.id.action_settings) {\r\n            return true;\r\n        }\r\n\r\n        return super.onOptionsItemSelected(item);\r\n    }\r\n\r\n    public void clickButton(View button){\r\n        switch (button.getId()){\r\n            case R.id.register:\r\n                new Thread(new Runnable() {\r\n                    @Override\r\n                    public void run() {\r\n                        int qos             = 2;\r\n                        String broker       = &quot;tcp:\/\/iot.eclipse.org:1883&quot;;\r\n                        EditText editTextID = (EditText)findViewById(R.id.id);\r\n                        String clientId     =  editTextID.getText().toString();\r\n                        MemoryPersistence persistence = new MemoryPersistence();\r\n                        try{\r\n                            mqttClient = new MqttClient(broker, clientId, persistence);\r\n                            MqttConnectOptions connOpts = new MqttConnectOptions();\r\n                            connOpts.setCleanSession(true);\r\n                            mqttClient.connect(connOpts);\r\n                            mqttClient.subscribe(clientId);\r\n                            mqttClient.setCallback(MainActivity.this);\r\n                            runOnUiThread(new Runnable() {\r\n                                public void run() {\r\n                                    Toast.makeText(getApplicationContext(), mqttClient.isConnected() ? &quot;\u8fde\u63a5\u6210\u529f&quot; : &quot;\u8fde\u63a5\u5931\u8d25&quot;, Toast.LENGTH_LONG).show();\r\n                                }\r\n                            });\r\n                        }\r\n                        catch (Exception e){\r\n                            e.printStackTrace();\r\n                        }\r\n\r\n                    }\r\n                }).start();\r\n                break;\r\n            case R.id.send:\r\n                EditText editTextTargetID =(EditText)findViewById(R.id.targetID);\r\n                final String targetID = editTextTargetID.getText().toString();\r\n                String content = ((EditText)findViewById(R.id.content)).getText().toString();\r\n                final MqttMessage message = new MqttMessage(content.getBytes());\r\n                if(mqttClient==null || !mqttClient.isConnected()){\r\n                    Toast.makeText(getApplicationContext(),&quot;MQTT\u672a\u8fde\u63a5&quot;,Toast.LENGTH_LONG).show();\r\n                    return;\r\n                }\r\n                new Thread(new Runnable() {\r\n                    @Override\r\n                    public void run() {\r\n                        try{\r\n                            mqttClient.publish(targetID, message);\r\n                        }\r\n                        catch (Exception e){\r\n                            e.printStackTrace();\r\n                        }\r\n                    }\r\n                }).start();\r\n                break;\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public void connectionLost(final Throwable cause) {\r\n        this.runOnUiThread(new Runnable() {\r\n            public void run() {\r\n                Toast.makeText(getApplicationContext(), &quot;\u5931\u53bb\u8fde\u63a5\uff1a&quot; + cause.getMessage(), Toast.LENGTH_LONG).show();\r\n            }\r\n        });\r\n    }\r\n\r\n    @Override\r\n    public void messageArrived(String topic, MqttMessage message)\r\n            throws Exception {\r\n        final String msg = new String(message.getPayload());\r\n        this.runOnUiThread(new Runnable() {\r\n            public void run() {\r\n                Toast.makeText(getApplicationContext(), &quot;\u6536\u5230:&quot;+msg, Toast.LENGTH_LONG).show();\r\n            }\r\n        });\r\n    }\r\n\r\n    @Override\r\n    public void deliveryComplete(IMqttDeliveryToken token) {\r\n        try {\r\n            final String msg = new String(token.getMessage().getPayload());\r\n            this.runOnUiThread(new Runnable() {\r\n                public void run() {\r\n                    Toast.makeText(getApplicationContext(), &quot;\u53d1\u9001\u5b8c\u6bd5:&quot; + msg, Toast.LENGTH_LONG).show();\r\n                }\r\n            });\r\n        }\r\n        catch (Exception e){\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n\r\n&lt;LinearLayout xmlns:android=&quot;http:\/\/schemas.android.com\/apk\/res\/android&quot;\r\n    xmlns:tools=&quot;http:\/\/schemas.android.com\/tools&quot; android:layout_width=&quot;match_parent&quot;\r\n    android:layout_height=&quot;match_parent&quot; android:paddingLeft=&quot;@dimen\/activity_horizontal_margin&quot;\r\n    android:paddingRight=&quot;@dimen\/activity_horizontal_margin&quot;\r\n    android:paddingTop=&quot;@dimen\/activity_vertical_margin&quot;\r\n    android:paddingBottom=&quot;@dimen\/activity_vertical_margin&quot;\r\n    android:orientation=&quot;vertical&quot;\r\n    tools:context=&quot;.MainActivity&quot;&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=&quot;fill_parent&quot;\r\n        android:layout_height=&quot;50dp&quot;\r\n        android:orientation=&quot;horizontal&quot;&gt;\r\n\r\n        &lt;TextView\r\n            android:layout_width=&quot;50dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot;\r\n            android:gravity=&quot;center&quot;\r\n            android:text=&quot;ID:&quot;\/&gt;\r\n\r\n        &lt;EditText\r\n            android:id=&quot;@+id\/id&quot;\r\n            android:layout_width=&quot;100dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot; \/&gt;\r\n\r\n        &lt;Button\r\n            android:id=&quot;@+id\/register&quot;\r\n            android:layout_width=&quot;wrap_content&quot;\r\n            android:layout_height=&quot;fill_parent&quot;\r\n            android:text=&quot;register&quot;\r\n            android:layout_alignParentLeft=&quot;true&quot;\r\n            android:layout_alignParentStart=&quot;true&quot;\r\n            android:onClick=&quot;clickButton&quot; \/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=&quot;fill_parent&quot;\r\n        android:layout_height=&quot;50dp&quot;\r\n        android:orientation=&quot;horizontal&quot;&gt;\r\n        &lt;TextView\r\n            android:layout_width=&quot;80dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot;\r\n            android:gravity=&quot;center&quot;\r\n            android:text=&quot;\u63a5\u6536\u65b9ID:&quot;\/&gt;\r\n        &lt;EditText\r\n            android:id=&quot;@+id\/targetID&quot;\r\n            android:layout_width=&quot;50dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot; \/&gt;\r\n        &lt;TextView\r\n            android:layout_width=&quot;40dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot;\r\n            android:gravity=&quot;center&quot;\r\n            android:text=&quot;\u5185\u5bb9:&quot;\/&gt;\r\n        &lt;EditText\r\n            android:id=&quot;@+id\/content&quot;\r\n            android:layout_width=&quot;100dp&quot;\r\n            android:layout_height=&quot;fill_parent&quot; \/&gt;\r\n        &lt;Button\r\n            android:text=&quot;Send&quot;\r\n            android:id=&quot;@+id\/send&quot;\r\n            android:layout_width=&quot;wrap_content&quot;\r\n            android:layout_height=&quot;fill_parent&quot;\r\n            android:layout_below=&quot;@+id\/textView&quot;\r\n            android:layout_alignParentLeft=&quot;true&quot;\r\n            android:layout_alignParentStart=&quot;true&quot;\r\n            android:onClick=&quot;clickButton&quot; \/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/LinearLayout&gt;\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>package com.example.myapplication; impor &hellip; <a href=\"https:\/\/www.lixiaodong.com\/?p=150\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[25,36,37],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-android","tag-android-2","tag-mqtt","tag-paho"],"_links":{"self":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=150"}],"version-history":[{"count":3,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":153,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/150\/revisions\/153"}],"wp:attachment":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}