Android手机同时使用Wi-Fi和数据流量

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

时间: 2024-10-10 06:18:44

Android手机同时使用Wi-Fi和数据流量的相关文章

Android中向SD卡读写数据,读SD卡和手机内存

package com.example.sdoperation; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import android.support.v7.app.Actio

Android手机同步电脑端google chrome书签

我先声明:文中FQ 都是博客园自动将中文(fan qiang)转换为FQ的,并不是我本来写的就是FQ~~ 手机和电脑都必须要能登录google(Xee:几乎所有做开发的人都每天的生活都离不开谷歌了,可以我们的天朝有意屏蔽之,FUCK GFW!) 当时我们不是每时每刻在电脑前,还是得用手机,那么手机或平板同步google就有些困难了(Xee:尤其在天朝-) 1:要同步google的一些数据,首先要能访问到google(FQ?),这是必须的: 2:手机具备访问google(FQ?),和一些googl

GPS部标平台的架构设计(六)-Android手机客户端和手机查车设计

对于GPS软件平台,虽然有功能非常丰富的PC端或BS客户端,但是客户也是需要移动客户端来作为自己的辅助工具,也是需要的.做为GPS平台的设计者和开发者,在开发移动客户端的时候,也需要从常规的服务器开发和客户端开发的思维中,转变过来,当然客户的需求也需要转变,因为毕竟不能随心所欲的将PC端的所有功能需求照搬到手机客户端,手机的开发环境.网络环境.使用环境都决定了设计理念与PC端的设计是完全不一样的. 通常我们成为GPS部标平台的手机客户端为手机查车,实际上现在的功能不仅仅是查车,由于客户需求的推进

android 手机网络接入点名称及WAP、NET模式的区别

移动 电信 联通 APN cmwap cmnet ctwap ctnet 3gwap uniwap 3gnet uninet设置 APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务).CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等). 中国移动APN: cmwap (2G) cmnet (3G)中国电信APN: ctwap (2G) ctnet (3G)中国联通APN: uniw

Android手机 Fildder真机抓包

Android 手机 Fildder 真Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的"进出"的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思). Fiddler 要比其他的网络调试器要更加简单,因为它仅仅暴露http通讯还有提供一个用户友好的格式. 对于Android开发的同事最头疼的事情莫过于真机抓包,然后Fiddle

Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

本文首发于CSDN博客,转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744943 记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其中就包括Android手机和Android Pad.然后为了节省人力,公司无节操地让Android手机和Android Pad都由我们团队开发.当时项目组定的方案是,制作两个版本的App,一个手机版,一个Pad版.由于当时手机版的主体功能已经做的差不多了,所以Pad版基本上就

android获取某应用的帧数据

android获取某应用的帧数据: 说明: (打开手机 开发者选项-GPU显示配置文件(显示于 adb shell dumpsys gfxinfo)勾上,只有4.1以上支持) 在android4.1中,谷歌提供了一个工具来,叫做" GPU呈现模式分析(Profile GPU rendering)", 在开启这个功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息 开始操作: 命令行 adb shell dumpsys gfxinfo com.taobao.mobile.d

MingQQ Android版发布了,可以在Android手机上登录你的QQ,收发消息哦...

最近为了学习Android开发,特意将原来写的MingQQ Windows版移植到了Android上面,以此练手.通过这次练习,学习到了不少Android开发的相关知识,特别是界面开发部分. MingQQ的界面模仿了Android QQ的基本功能,虽然体验性完全比不上QQ,但目前技术有限,只能做到现在这水平了,更好的界面用户体验留待以后再提升吧. 下拉刷新目前使用了第三方开源库Android-PullToRefresh,以后再考虑替换成自己写的下拉刷新组件,并增加消息列表的右滑删除功能. 发布的

Android手机自带内部存储路径的获取 (转)

转自:http://my.oschina.net/liucundong/blog/288183 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为2G). 我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看到该存