標籤:find app load test 設定 send else his nts
4 Android代碼只是為了實現功能,比較簡單,就只是貼出來 源碼
package com.myapps.mqtttest;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.paho.client.mqttv3.MqttCallback;import org.eclipse.paho.client.mqttv3.MqttClient;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.MqttMessage;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.provider.Settings;import android.view.KeyEvent;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private TextView resultTv; private String mDeviceID; private String host = "tcp://192.168.101.195:61613"; private String userName = "admin"; private String passWord = "password"; private Handler handler; private MqttClient client; private String myTopic = "test"; private MqttConnectOptions options; private ScheduledExecutorService scheduler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDeviceID = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); resultTv = (TextView) findViewById(R.id.result); init(); handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 1) { Toast.makeText(MainActivity.this, (String) msg.obj, Toast.LENGTH_SHORT).show(); System.out.println("-----------------------------"); } else if(msg.what == 2) { Toast.makeText(MainActivity.this, "串連成功", Toast.LENGTH_SHORT).show(); try { client.subscribe(myTopic, 1); } catch (Exception e) { e.printStackTrace(); } } else if(msg.what == 3) { Toast.makeText(MainActivity.this, "串連失敗,正在重連", Toast.LENGTH_SHORT).show(); } } }; startReconnect(); } private void startReconnect() { scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { if(!client.isConnected()) { connect(); } } }, 0 * 1000, 10 * 1000, TimeUnit.MILLISECONDS); } private void init() { try { //host為主機名稱,test為clientid即串連MQTT的用戶端ID,一般以用戶端唯一識別碼表示,MemoryPersistence設定clientid的儲存形式,預設為以記憶體儲存 client = new MqttClient(host, "testandroid", 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 MqttCallback() { @Override public void connectionLost(Throwable cause) { //串連丟失後,一般在這裡面進行重連 System.out.println("connectionLost----------"); } @Override public void deliveryComplete(IMqttDeliveryToken token) { //publish後會執行到這裡 System.out.println("deliveryComplete---------" + token.isComplete()); } @Override public void messageArrived(String topicName, MqttMessage message) throws Exception { //subscribe後得到的訊息會執行到這裡面 System.out.println("messageArrived----------"); Message msg = new Message(); msg.what = 1; msg.obj = topicName+"---"+message.toString(); handler.sendMessage(msg); } }); } catch (Exception e) { e.printStackTrace(); } } private void connect() { new Thread(new Runnable() { @Override public void run() { try { client.connect(options); Message msg = new Message(); msg.what = 2; handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); Message msg = new Message(); msg.what = 3; handler.sendMessage(msg); } } }).start(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(client != null && keyCode == KeyEvent.KEYCODE_BACK) { try { client.disconnect(); } catch (Exception e) { e.printStackTrace(); } } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { super.onDestroy(); try { scheduler.shutdown(); client.disconnect(); } catch (MqttException e) { e.printStackTrace(); } }}View Code
apollo實現c#與android訊息推送(四)