編輯:關於Android編程
大家都知道,當手機成功連接到Wi-Fi熱點以後,手機所產生的上網流量都是通過Wi-Fi來傳輸的,而手機的移動流量會被禁用。但是,我們現在有特殊的業務需求,需要讓手機成功連接Wi-Fi後還可以走數據流量(比如3G、4G)。
Android手機同時使用Wi-Fi和數據流量 背景介紹 相關調研 查找方法 實現方法 使用wireless-tools方式驅動Wi-Fi 准備工作 通過命令啟動Wi-Fi模塊 待解決的問題 使用wpa_supplicant方式驅動Wi-Fi 准備工作 通過命令啟動Wi-Fi模塊 待解決的問題 總結
公司的主題業務是對通信基站的研發,我需要研發一款軟件來配合基站的測試工作。通過Android手機通過Wi-Fi熱點連接到服務器上以後,需要有服務器通過Wi-Fi通道來發送命令,讓手機去做相應的數據流量測試。為了滿足這個需求,我們需要讓手機的Wi-Fi和數據流量同時起作用。
在正常使用中,我們發現當手機連接到Wi-Fi熱點以後,和手機流量相關的網卡就會被down掉。
下圖為手機關閉Wi-Fi,而打開數據流量的時候,使用netcfg命令所查看到的網卡的狀態:
可以看到rmnet0網卡狀態是:up,並且已經成功分配到ip地址
下圖為手機打開Wi-Fi的狀態,這個時候數據流量會自動關閉,但是wlan0網卡會被分配一個ip地址:
我們所理想的狀態是,wlan0和rmnet0 同時為up狀態,並且同時可以dhcp到地址,這樣才可以同時保證網絡訪問,理想狀態如下圖所示:
想實現兩個網卡同時起作用,我想到了兩個方法:
- 1、手機先成功連接Wi-Fi熱點,這個時候再手動將rmnet0網卡設置為up狀態,並且分配ip地址。
- 2、手機使用數據流量,然後我們手動加載wlan0驅動,最後讓網卡可以成功分配到ip地址。
這是我自己想到的兩個方法,在後續的研究中,我采用了第二個方法。就是通過手動的方式加載wlan0內核。
在Android 系統中,有兩種方式,分別是:wpa_supplicant方式和使用wireless-tools的方式。
- wpa_supplicant:wpa_supplicant本是開源項目源碼,被谷歌修改後加入android移動平台,它主要是用來支持WEP,WPA/WPA2和WAPI無線協議和加密認證的,而實際上的工作內容是通過socket(不管是wpa_supplicant與上層還是wpa_supplicant與驅動都采用socket通訊)與驅動交互上報數據給用戶,而用戶可以通過socket發送命令給wpa_supplicant調動驅動來對WiFi芯片操作。其優點是:可以支持多種加密方式的wifi 基站,缺點是:不支持所有驅動。
1、需要預先編譯wireless-tools(請參考“android4.2 wifi驅動添加和調試”)。
2、編譯完成後得到libiw.a,iwlist,iwconfig文件。
3、使用Android 提供的 adb 工具,通過push 命令:
將libiw.a文件放入/system/lib目錄下;
將iwlist,iwconfig文件放入/system/bin目錄下;
ex:adb push e:\libiw.a /system/bin
強調一下,下面的命令必須按順序執行。
1、 加載wlan0 驅動:
命令:insmod /system/lib/modules/wlan.ko
2、 將wlan0 網卡設置為up狀態:
命令:netcfg wlan0 up
3、 掃描AP熱點:
命令:iwlist wlan0 scan
4、 連接AP熱點:
命令:iwconfig wlan0 essid hello
這裡的“hello” 是熱點的名字
5、 給wlan0動態分配ip地址:
命令:netcfg wlan0 dhcp
6、 另:通過netcfg 和 ifconfig wlan0,都可以查看網卡的狀態。此時網卡已經up並且可以正常分配到ip地址。
1、 通過測試發現:當wifi 通過WPA\WPA2方式加密的時候,是無法通過這種方式連接wifi 熱點的,因為在上文中提到過:wiretool-tools 這個命令只能用於使用wep方式加密的路由器。
因為谷歌將wpa_supplicant 模塊加入Android系統中,所以我們不再需要加入額外的包
1、加載wlan0 驅動:
命令:insmod /system/lib/modules/wlan.ko
2、將wlan0 網卡設置為up狀態:
命令:netcfg wlan0 up
3、將wlan0 網卡連接wifi 熱點:
命令:wpa_supplicant -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf –B
4、給wlan0 分配ip地址
命令: netcfg wlan0 dhcp
1、此方法在華為G716 上測試成功,但是在別的手機設備上使用失敗。目前定位到的問題是:“wpa_supplicant -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf –B”這句話沒有正確執行。
這篇文章主要是講述如何得到Android手機通過手動的方式啟動Wi-Fi模塊
我們將使用微信公眾賬號方倍工作室作為講解的例子,二維碼見底部。本系列教程將引導你完成如下任務:創建新浪雲計算平台應用啟用微信公眾平台開發模式基礎接口消息及事件微信公眾平台
本文實例講述了Android操作SQLite數據庫(增、刪、改、查、分頁等)及ListView顯示數據的方法。分享給大家供大家參考,具體如下:由於剛接觸android開發
Android開發過程中,經常遇到一個項目需要重復的定義相同樣式的標題欄,Android相繼推出了actionBar, toolBar, 相信有用到的朋友也會遇到一些不如
Android結合版最近幾個版本在包大小配額上超標了,先後采用了包括圖片壓縮,功能H5,無用代碼移除等手段減包,還是有著很大的減包壓力。組內希望我能從代碼的角度減少一些包