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

Android手机同时使用Wi-Fi和数据流量相关推荐

  1. android 手机同时使用wifi 和数据流量(3G/4G...)

    Android手机同时使用Wi-Fi和数据流量 大家都知道,当手机成功连接到Wi-Fi热点以后,手机所产生的上网流量都是通过Wi-Fi来传输的,而手机的移动流量会被禁用.但是,我们现在有特殊的业务需求 ...

  2. 美国部分Android手机竟将用户隐私数据回传至上海服务器!

    美国出售的Android手机,居然会将用户的个人数据传回到中国上海的服务器?今天美国大量安全媒体就报道了这样一件事,美国人民听来大概是非常惊悚的!Kryptowire安全公司的专家发现美国在售某些品牌 ...

  3. Android 手机获取加速度传感器加速度数据并自定义采样频率

    原文链接:http://blog.csdn.net/llp1992/article/details/41786865 因为项目需要利用到了Android手机中的加速度传感器来获取三个加速度轴的加速度大 ...

  4. android数据线接口定义,制作Android手机可连接普通键盘的数据转接线

    在上一篇" 现在市面上的Android手机和Android平板电脑基本上都支持USB OTG技术.这种技术将允许用户将手机或平板电脑通过usb2.0数据线连接到标准USB键盘和鼠标,甚至普通 ...

  5. android环境监测,基于Wi―Fi和Android家居环境监测与实现

    摘 要 为了人们生活环境健康安全,实现家居环境检测,利用现在手持智能设备,设计出一种基于Android的家居检测系统.本文采用了具有Android操作系统的智能手机或平板电脑作为家居设备终端,以STM ...

  6. Android手机蓝牙互联,并传递数据。

    今晚整理下,实验室没开门,只好在一教将就一下了 关于蓝牙,看了好些天,但是看完后想想也没啥,都是谷歌做好了的东西,我们只要用用API就ok了,哎. 首先,如果是互相传递数据的,两部android设备各 ...

  7. Android使用adb命令查看APP数据流量使用情况

    1. 在Android系统中,"/proc/net/xt_qtaguid/stats"这个文件里储存着各个应用的流量信息,统计流量的时候可以用到这个文件.    首先获取待测应用的 ...

  8. APP技巧:手机连接WiFi后,移动数据流量要不要关闭,看完你就懂了!

    在移动互联网普及的今天,大家想上网是非常容易的一件事情.打开手机数据流量一秒钟就能连接上互联网,享受网络带来的乐趣.不论是刷视频看电影还是下载需要的文件,统统都能够通过移动数据来搞定. 但是使用移动数 ...

  9. ESP8266 WIFI模块学习之路(7)——自写Android手机APP接受单片机数据

    上一篇是写关于自写Android手机APP给单片机下发数据的,这次我将写一下APP如何接受单片机数据. 其实使用调试助手,或者别人开的的APP同样能够实现接受单片机数据,但想学习的,我还是建议能够自己 ...

最新文章

  1. opencv中 当你直接把别人的程序拖进去无法运行时 解决方法
  2. Boost:异步操作,需要boost :: asio :: async_compose函数的测试程序
  3. 喷水装置(信息学奥赛一本通-T1424)
  4. 波兰表达式 构建 表达式树
  5. 成都Uber优步司机奖励政策(4月22日)
  6. 如何使用计算机管理来为硬盘分区,电脑如何硬盘分区合理_电脑硬盘分区的基本步骤-win7之家...
  7. 微服务化的基石--持续集成
  8. BAT脚本编写教程(比较易懂和全面)
  9. php画圆 锯齿,优雅的解决canvas画圆锯齿问题
  10. java BASE64Encoder详细介绍及简单实例
  11. STM32单片机语音声控智能台灯可调光冷暖光人检测锂电池供电太阳能和USB充电
  12. lua中的整除与取整数
  13. Java全栈工程师学习
  14. c语言实现 自动访问网址,使用C语言实现网站开发
  15. 南理工计算机学院老师联系电话,於东军(计算机科学与技术学院)老师 - 南京理工大学 - 院校大全...
  16. 【计算机科学速成课】[40集全/文字版] - 15.阿兰·图灵
  17. EasyUI 增删改查完全详细
  18. 【web 前端面试笔试题自总结】
  19. ubuntu openjdk6 无法编译java程序_无法在Ubuntu上运行Java GUI程序
  20. 收发一体超声波测距离传感器模块_超声波模块HC-SR04简介以及编程

热门文章

  1. 基于数学形态学的道路裂缝病害检测
  2. baxter仿真操作简单命令
  3. Blender2.8安装Armory3D插件
  4. Auto.js 一个同一张图片多次多点找色的例子ColorMapping.findMultiColors
  5. machine learning : 最小二乘法之线性函数 --- python实现
  6. 浅谈静电场的边值问题(包括数学物理方法和数值计算)
  7. stty的使用 和 RTSCTS问题
  8. 几个链接搞定你想要的HEX颜色和RBG
  9. 同济七版高等数学 上册 复习指导、公式推理简易过程、常用结论归纳
  10. 深入剖析斐波拉契数列