編輯:關於Android編程
算了下時間居然有20天沒來更新了,人變懶了,不過也沒時間了,今天抽點時間上點干貨,覺得有用的就收下吧。
有很多人問我如何和手機建立連接(USB數據線連接,至於wifi 那是以後討論的),和手機通信最後還是通過socket,只是這中間借助了adb 的forward。要建立socket 連接必須要有ip地址和端口號。搞過socket 編程的人都知道服務端會監聽某一個端口,直到有連接請求的時候才會產生一個socket,然後通過這個socket和客戶端通信,所以這裡就有兩個問題
1) 手機的IP地址和端口號到底是多少
2) 服務端在哪裡,手機如何接收PC 端發送的socket 連接。
首先第一個問題
再查看手機信息之前誰也不知道手機的IP 地址多少,端口號這個更加不知道用哪個了。神奇的ADB 給我提供了解決辦法。ADB 裡面有個forward 命令,這個命令的意思網上有很多解釋。命令格式如下:
adb -s "xxxx" forward tcp: 10000 tcp: 2000
上面命令的10000,和2000是兩個端口號,意思就是說所有發往本地計算機(127.0.0.1)10000端口號的消息都會被adb 重定向到手機的2000端口號,這裡的10000和2000 是自己定的,隨便定就可以了,但是不能和現有的沖突。所以第一個問題也就解決了,要連接上手機必須先調用重定向,然後再調用socket 函數 connect和服務端建立連接。步驟如下
1) adb -s "xxxx" forward tcp: 10000 tcp: 2000
2) 調用socket 函數,關鍵是 sockAddr 的初始化
SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(L"127.0.0.1");
sockAddr.sin_port = htons(10000);
int r = ::connect( m_socket, (sockaddr*)&sockAddr, sizeof(sockAddr) );
至於第二個問題那就需要手機端的配合了,在上面調用了connect 函數,那就肯定得有個地方一直在accept,那這個地方在哪裡?這個就需要你自己寫一個APK 程序了,安裝到手機上,然後監聽端口,接收連接。要接收連接,就需要把socket 綁定到一個端口上,這回你肯定知道了這個要綁定的端口就是上面 forward 的2000端口。
最後來整理一下這個流程,下面是結合我自己的代碼的一個流程
1) 使用adb 判斷是否有設備,命令如下
adb devices
2) 如果存在設備並且是device狀態(這裡不考慮驅動的問題,有關驅動的看上一節),則判斷手機上是否已經安裝了自己的APK 程序。如果沒有安裝則安裝一個自己的APK。
adb -s "xxx" install "xxxx.apk"
3) 安裝成功之後 重定向端口號,也許你可能需要重定向多個不同端口號,那就多調用幾次forward,傳入不同的參數就可以。
adb -s "xxxx" forward tcp: 10000 tcp: 2000
4) 啟動APK 的一個服務,或者APK 的activity都可以,目的就是要讓手機端啟動線程來接受PC 端發起的連接請求。可以參數adb 的命令
adb -s "xxx" shell am start
5) 和手機端進行socket 通信。
SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(L"127.0.0.1");
sockAddr.sin_port = htons(10000);
int r = ::connect( m_socket, (sockaddr*)&sockAddr, sizeof(sockAddr) );
轉讓Android,IOS 手機助手各種技術資料,文檔,以及源碼,有需要的可以聯系我QQ: 2506314894
Service沒有UI,因為service是後台運行如:下載,網絡I/O 等等Service的生命周期從它被創建開始,到它被銷毀為止,onCrea
概括在上一篇博客中僅僅是簡單的講解了OkHttp的緩存問題,主要是通過http協議裡面的control-cache控制緩存,而且是僅僅只能是Get請求才能緩存,如果Pos
在用到支付類app時,都有一個簡密的輸入框。。開始實現的時候思路有點問題,後來到github上搜了下,找到了一個開源的庫看起來相當的牛逼,,來個地址先:https://g
有時候用到Android模擬器來模擬SD卡相關操作,在Eclipse中可以直接查看SD卡目錄; 首先,新建模擬器的時候要創建SD卡,存儲的大小根據需要創建; 啟動模擬