編輯:關於Android編程
主要功能為手機與遠程服務器進行16進制的數據收發,TCPControl類實現了16進制的數據收發功能,其中發送函數設置為每次發送4字節數據,服務器發來的數據在手機上會以Toast的形式顯示出來。
PS:附件中包含TCP調試助手,使用時將調試助手設置為TCP服務器,並勾選發送與接收欄中的16進制收發的選擇項
應用:
1.用戶在IP和PORT編輯框中對應值,點擊Set按鈕,完成服務器參數設置。
2.單擊手機上的SendTest按鈕,手機將想服務器發送數據。
系統代碼執行流程:
1.MainActivity中定義靜態String變量IP和靜態int變量PORT
2.設置Handler,該Handler用於將接收到的來自服務器的數據顯示在手機上
3.在OnCreate函數中獲取btnSet和btnTest控件,分別設置監聽器:btnSet用於設置IP和PORT,btnTest用於向服務器發送16進制的測試數據“6666”
4.在OnCreate函數中創建新線程,該線程用於監聽來自服務器的數據,每當收到來自服務器的數據時,會向Handler發送消息,Handler收到消息後會在手機界面上顯示。之後線程給服務器返回消息0000,循環
TCPControl類解析:
code:
package com.example.tcptest; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; public class TCPControl { static Socket s = null; static DataOutputStream dout = null; static DataInputStream din = null; static String backCMD = null; static public int recvCMD() throws Exception { if (s == null) s = new Socket(MainActivity.IP, MainActivity.PORT); if (dout == null) dout = new DataOutputStream(s.getOutputStream()); if (din == null) din = new DataInputStream(s.getInputStream()); Thread.sleep(50, 0); for (int i = 0; i < 10; i++) { if (din.available() > 0) { /* 客戶端非16進制發送 byte[] buffer = new byte[din.available()]; System.out.println(din.available()); din.read(buffer); backCMD = Msg from peer: + new String(buffer); */ int backLength = din.available(); char[] buffer = new char[backLength]; for(int j = 0 ; j < backLength ; ++j) { buffer[j] = (char) din.readByte(); buffer[j] = (char) (buffer[j] + '0'); } backCMD = new String(buffer); return 1; } else { Thread.sleep(500, 0); return 0; } }; return 0; } static public void sendCMD(final String cmd) { try { if (s == null) s = new Socket(MainActivity.IP, MainActivity.PORT); if (dout == null) dout = new DataOutputStream(s.getOutputStream()); if (din == null) din = new DataInputStream(s.getInputStream()); Thread.sleep(50, 0); // 實際中剛連上後發數據需要一定延時 確保雙方鏈接初始化完成 char[] temp = new char[4]; for (int i = 0; i < cmd.length(); ++i) { temp[i] = (char) (cmd.charAt(i) - '0'); } String strTemp = new String(temp); dout.writeBytes(strTemp); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
TCPControl類包含發送和接收兩個函數
發送:
用戶向服務器發送消息時調用該函數,該函數功能為首先判斷套接字是否為空,若為空則根據用戶設置的IP和PORT新建一個套接字,之後利用該套接字建立數據收發流,在將要發送的消息cmd轉為16進制後利用發送流的writeBytes函數將消息發送至服務器
接收:
首先判斷套接字是否為空,若為空則根據用戶設置的IP和PORT新建一個套接字,之後利用該套接字建立數據收發流,判斷接收流是否收到數據,若收到則將數據轉為16進制並返回1,MainActivity中的檢測線程若發現接收函數返回值為1,則調用Handler將消息顯示出來。若為接收到消息,則會返回0。在該過程中MainActivity的線程會一直調用接收函數,查詢服務器是否有消息發送至手機。
本文實例講述了Android通過應用程序創建快捷方式的方法。分享給大家供大家參考。具體如下:Android 快捷方式是桌面最基本的組件。它用於直接啟動某一應用程序的某個組
因為在framework中想添加這個功能,所以寫了個appliction來實現一下獲取正在運行的應用程序: 還是先看圖吧: 這個app主要是簡單的實現了獲取非系統的應用程
在同組項目進行共享時,容易把本地的配置文件比如*.iml等文件上傳至共享服務器,這樣會對隊友造成巨大的麻煩,為了解決這個問題,可以使用下面方法解決,下面以上傳到服務器的a
ProgressBar進度條,分為旋轉進度條和水平進度條,進度條的樣式根據需要自定義,之前一直不明白進度條如何在實際項目中使用,網上演示進度條的案例大多都是通過Butto