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 手机同时使用wifi 和数据流量(3G/4G...)相关推荐

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

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

  2. Android中wifi与数据流量的切换监听

    最近在做一个wifi和移动数据的监控功能,来来回回折腾了一阵子,这个模块的主要功能是监听整个APP的wifi与数据流量的切换,让用户使用专用流量,而不是用wifi,给一个弹窗,点击确认,自动切换数据流 ...

  3. Android手机通过wifi进行数据传输(二)

    上文接 Android手机通过wifi进行数据传输(一) 本文参照自: [Android连接Wifi和创建Wifi热点 demo] 以下是源码文件 原文件Constant.java package e ...

  4. android 手机找回,找回Android手机的 Wi-Fi功能

    当Android手机的Wi-Fi功能出现问题时可以先进入系统设置,如果状态信息中WLAN MAC一栏显示不可用状态(图1),那就代表了该手机丢失了imei和mac地址,而这也是很多搭载高通处理器手机的 ...

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

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

  6. Android 开发系列7 判断上网方式(Wifi还是数据流量)

    首先要在AndroidManifest.xml加上权限: <uses-permission android:name="android.permission.ACCESS_NETWOR ...

  7. QCSuper:在高通手机猫上捕获无线2G/3G/4G数据包

    QCSuper是一种基于高通(Qualcomm)手机和调制解调器(俗称"猫")通信的工具,可以捕获原始的2G/3G/4G无线电帧等数据内容.它允许你使用已root的安卓手机,usb ...

  8. 在高通手机猫上捕获无线2G/3G/4G数据包的工具QCSuper

    QCSuper是一种基于高通(Qualcomm)手机和调制解调器(俗称"猫")通信的工具,可以捕获原始的2G/3G/4G无线电帧等数据内容.它允许你使用已root的安卓手机,usb ...

  9. android手机避免不必要的流量,老生常谈 如何防止手机流量偷跑六小招

    原标题:老生常谈 如何防止手机流量偷跑六小招 最近手机流量偷跑问题又被拿到了桌面上,相信很多小伙伴也发生这种情况,都没怎么上网,怎么流量就少了这么多呢?安装到手机中的部分软件,可能会由于实时数据的更新 ...

最新文章

  1. R语言dataframe数据列格式转换(从整型integer转化为浮点型float)
  2. 从socket中可以获取信息
  3. Linux音频驱动-OSS和ALSA声音系统简介及其比较
  4. 十分钟理解线性代数的本质_如何理解线性代数?
  5. breadweb控制台下载_路由器刷breed web控制台助手
  6. AOSP ~ 默认开启开发者模式
  7. c语言判断按下键盘,找出键盘上当前按下的键
  8. 无法登录到你的账户,通常可以通过从你的账户注销,然后重新登录
  9. NSIS 头文件介绍_WordFunc.nsh(3)
  10. 171025_matlab_imag函数
  11. 【ARM汇编】打印金字塔 | 打印倒三角
  12. MarkdownPad2安装教程
  13. DOC与DOCX区别【100字】【原创】
  14. 如何使用gcore工具获取一个core文件而不重启应用?
  15. 赋能合作伙伴,共建价值生态 | ZDNS产品及行业解决方案培训会圆满举行
  16. HBase、Kudu 和 ClickHouse 全视角对比
  17. 在matlab中chrom,一段matlab程序,其中chrom(i,j)=p(chrom(i,j),j)是什么意思
  18. android默认视频播放器,WebView不打开android默认视频播放器?
  19. 滴滴开源的深度与温度——滴滴开源委员会秘书长吴国斌专访
  20. 七夕“加餐”:深度学习图像算法在内容安全领域的应用实践和优化

热门文章

  1. WORD制表位完成杂志目录视频教程
  2. 如何实现一个丝滑的点击水波效果
  3. PBN飞越转弯Flyover衔接DF航段保护区组图
  4. 如何从零开始学习c语言,你真的造吗
  5. 孤岛惊魂4服务器稳定吗,《孤岛惊魂5》PC性能综合测试 程序运行稳定、改进完爆前作...
  6. 风险与收益并存——新书《利益攸关》解读
  7. 22年春晚,一个让元宇宙照进现实的沉浸式演出舞台
  8. Node.js实现网络新闻爬虫及搜索功能(一)
  9. 软件技术的现状以及未来发展趋势
  10. 缺点 霍夫圆_基于机器视觉的磁环表面缺陷检测研究