Android線程中隊UI進行操作、按鈕長按實現連續發送命令的效果、檢測socket與伺服器串連狀態

來源:互聯網
上載者:User

標籤:android   線程   socket   

線程中設定UI問題:

Android處於安全考慮,禁止在子線程中隊系統的UI進行操作,因此,需要通過Handler對其進行處理。

在子線程中,當需要進行UI相關操作時,可通過Handler類實現。

1.在主線程中建立Handler,其功能為監聽msg,當收到msg時進行一些操作

public Handler mHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {...}}}
2.在子線程中發送msg:

new Thread(new Runnable() {public void run() {try {mHandler.obtainMessage(1).sendToTarget();Thread.sleep(1000);<span style="white-space:pre"></span>}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();

實現長按按鈕連續執行操作的效果:

本例中為長按某按鈕時,手機通過TCP持續發送某個命令

public void hookMove(final Activity activity, final String cmd,MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {Toast.makeText(activity, "鉤子開始移動", Toast.LENGTH_SHORT).show();longClicked = true;Thread t = new Thread() {@Overridepublic void run() {super.run();while (longClicked) {// 發送命令TCPControl.sendCMD(cmd);try {Thread.sleep(250);} catch (InterruptedException e) {e.printStackTrace();}}}};t.start();} else if (event.getAction() == MotionEvent.ACTION_UP) {Toast.makeText(activity, "鉤子停止移動", Toast.LENGTH_SHORT).show();longClicked = false;System.out.println("ACTION_UP");}}
hookUp.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubcmd = "12" + strHookSelected + "3";hookMove(activity, cmd, event);return true;}});


判斷手機的socket伺服器的串連狀態:

相對於系統提供的isConnected等函數來說,通過類比Linux中的ping操作效果更好(http://blog.csdn.net/yudajun/article/details/10062339)

代碼功能為向指定ip發送一個ping命令,若成功,則證明socket為串連狀態

private static boolean startPing(String ip) {boolean success = false;Process p = null;try {p = Runtime.getRuntime().exec("ping -c 1 -i 0.2 -W 1 " + ip);int status = p.waitFor();if (status == 0) {success = true;} else {success = false;}} catch (Exception e) {success = false;} finally {p.destroy();}return success;}




Android線程中隊UI進行操作、按鈕長按實現連續發送命令的效果、檢測socket與伺服器串連狀態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.