Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android手機同時使用Wi-Fi和數據流量

Android手機同時使用Wi-Fi和數據流量

編輯:關於Android編程

Android手機同時使用Wi-Fi和數據流量

大家都知道,當手機成功連接到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 基站,缺點是:不支持所有驅動。

wireless-tools:Wireless tools for Linux是一個Linux命令行工具包,用來設置支持Linux Wireless Extension的無線設備。優點是:支持幾乎所有的無線網卡和驅動,缺點是:不能連接到那些只支持WPA的AP,需要路由器設置為wep的加密方式才可以連接。

使用wireless-tools方式驅動Wi-Fi

准備工作

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

通過命令啟動Wi-Fi模塊

強調一下,下面的命令必須按順序執行。
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方式驅動Wi-Fi

准備工作

因為谷歌將wpa_supplicant 模塊加入Android系統中,所以我們不再需要加入額外的包

通過命令啟動Wi-Fi模塊

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模塊

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved