精华内容
下载资源
问答
  • 如果WIFI数据流量RGPS同时打开的话,先检测WIFI是否打开,再去检测数据流量是否打开是只返回WIFI打开的状态,而数据流量RGPS打开与否都不能正确检测到。Paste_Image.png如上图,笔者用这种方法是不行的,只能判断出...

    Android如何判断WIFI和数据流量RGPS是否同时打开?

    如果WIFI和数据流量RGPS同时打开的话,先检测WIFI是否打开,再去检测数据流量是否打开是只返回WIFI打开的状态,而数据流量RGPS打开与否都不能正确检测到。

    ebf37a58f327

    Paste_Image.png

    如上图,笔者用这种方法是不行的,只能判断出WIFI的正确状态。

    那么,可以再单独判断数据流量的状态,如下:

    ebf37a58f327

    Paste_Image.png

    附上代码

    /**

    * 返回手机移动数据的状态**

    @param pContext*

    @param arg 默认填null*

    @return true 连接 false 未连接

    **/

    @SuppressWarnings({"rawtypes", "unchecked"})

    public static boolean getMobileDataState(Context pContext, Object[] arg) {

    try {

    ConnectivityManager mConnectivityManager = (ConnectivityManager) pContext.getSystemService(Context.CONNECTIVITY_SERVICE);

    Class ownerClass = mConnectivityManager.getClass();

    Class[] argsClass = null;

    if (arg != null) {

    argsClass = new Class[1];

    argsClass[0] = arg.getClass();

    }

    Method method = ownerClass.getMethod("getMobileDataEnabled", argsClass);

    Boolean isOpen = (Boolean) method.invoke(mConnectivityManager, arg);

    return isOpen;

    } catch (Exception e) {

    return false;

    }

    }

    展开全文
  • android 关闭wifi打开移动数据网络
  • wifi 连接/数据传输

    2018-05-24 21:21:08
    2)一个手机打开wifi 热点 作为服务端,点击receiver 作为,准备接受数据 3)一个手机链接 热点 ,点击 send ,作为 客户端发送数据到服务端,同时接受服务端数据反馈 4)实现 WiFi热点 socket 数据通信,具体 数据...
  • Android手机同时使用Wi-Fi和数据流量 大家都知道,当手机成功连接到Wi-Fi热点以后,手机所产生的上网流量都是通过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模块

    展开全文
  • 当然首先要打开WIFI,手机要和电脑在同一局域网内。  2. 在手机上安装AdbWireless(Google Play上需搜一下就有),注意手机是需要root过的。  3. 安装完毕后在手机上启动AdbWireless,按屏幕中央的大按钮激活无线...
  • Android中wifi与数据流量的切换监听

    千次阅读 2016-11-01 23:32:52
    最近在做一个wifi和移动数据的监控功能,来来回回折腾了一阵子,这个模块的主要功能是监听整个APP的wifi与数据流量的切换,让用户使用专用流量,而不是用wifi,给一个弹窗,点击确认,自动切换数据流量,关闭wifi。...

     最近在做一个wifi和移动数据的监控功能,来来回回折腾了一阵子,这个模块的主要功能是监听整个APP的wifi与数据流量的切换,让用户使用专用流量,而不是用wifi,给一个弹窗,点击确认,自动切换数据流量,关闭wifi。我的思路是写一个静态广播,监听在广播里面进行监听,启用系统弹窗,点击确认,自动切换网络,这里面有一个坑就是弹窗会在广播中多次被调用,其实只调用了一次,但是实际上多次调用系统的弹窗会一个叠加一个,搞了好久,终于搞好了,原来是系统广播导致的叠加,详情看代码:


    ConnectivityManager

     

     ConnectivityManager 是一个网络连接的管理类,里面封装了网络请求的详细信息,包括WiFi与移动数据流量的开关状态,正在开启与关闭的状态,连接状态等等,很适合做网络监听。还有一个类WifiManager ,这个类专门用来做WiFi的监听,他的监听效果比ConnectivityManager更加详细丰富,可以检测但是对流量没法生效。这里使用ConnectivityManager 就足够了。


    一、注册广播


    写一个类继承自BroadcastReceiver。

            @Override
            public void onReceive(Context context, Intent intent) {
                ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo gprs = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                NetworkInfo wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                if (intent.getAction().equals("Android.net.conn.CONNECTIVITY_CHANGE"))    {
                    //移动数据连接上时
                    if (gprs.isConnected()){
                    }
                    //wifi连接上时
                    if (wifi.isConnected()) {
                        // 切换网络,关闭wifi,开启流量
                        if (isShow) {//做一个标记,避免多次弹窗的叠加bug,初始值为true,重要
                            switchNetwork(context);
                        }
                    }
                    //断网时
                    if (!netManager.getGRPS().isConnected() || !netManager.getGRPS().isConnected()) {
                    }
                }


    二、弹窗


     弹窗一般用四种常用的方式:

    1、使用popupwindow

    2、使用dialog

    3、WindowManager

    4、系统弹窗

     一般的弹窗需要依附于activity,在activity中弹窗,但是在服务中,不能简单的使用这种方式,一般是采用系统的弹窗,他的优先级很高,覆盖于应用界面的最高层,并且要设置setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT),要不然会崩溃的。

        private void switchNetwork(final Context context) {
            AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialog);
            builder.setTitle("提示");
            builder.setMessage("请关闭wifi,打开移动网络");
            builder.setCancelable(false);
            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // 控制网络的开关
                    controlNetWork(context);
                    isShow = true;
                }
            });
            AlertDialog dialog = builder.create();
            // 需要把对话框的类型设为TYPE_SYSTEM_ALERT,否则对话框无法在广播接收器里弹出
            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
            dialog.show();
            isShow = false;
        }


    三、网络切换


     wifi的网络切换比较容易,直接设置setWifiEnabled就可以完成切换,而数据流量的切换比较麻烦,他的方法是私有的,无法调用,我们可以通过反射,找到他的方法进行调用:具体看代码


        private void controlNetWork(Context context) {
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            // 允许流量,阻止wifi
            wifiManager.setWifiEnabled(false);//false表示断开WiFi
            ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            boolean connected = conn.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
            if (!connected) {
                ConnectivityManager gprsCM = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                Class conmanClass;
                try {
                    conmanClass = Class.forName(gprsCM.getClass().getName());
                    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
                    iConnectivityManagerField.setAccessible(true);
                    final Object iConnectivityManager = iConnectivityManagerField.get(gprsCM);
                    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
                    final Method setMobileDataEnabledMethod = iConnectivityManagerClass
                            .getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
                    setMobileDataEnabledMethod.setAccessible(true);//true表示连接网络
                    setMobileDataEnabledMethod.invoke(iConnectivityManager, true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

    在清单文件中注册广播

    <receiver
                android:name=".NetChangeReceiver"
                android:label="NetChangeReceiver" >
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
    </receiver>

    添加权限:

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    以上代码很详细的描述了网络切换的实时检测,更加详细丰富的就不在这里写出来了。
    展开全文
  • 近期有个车载wifi音响项目涉及APP连接硬件,APP和硬件处于同一局域网,那么问题来了,如何保证APP在连接硬件wifiwifi 做热点不能上网)的同时开启移动网络(移动网络可以上网)也要能保证能通过移动网络上网。...

           近期有个车载wifi音响项目涉及APP连接硬件,APP和硬件处于同一局域网,那么问题来了,如何保证APP在连接硬件wifi(wifi 做热点不能上网)的同时和开启移动网络(移动网络可以上网)也要能保证能通过移动网络上网。这样的使用场景比较特殊,但如行车记录仪,wifi相机,wifi存储器等在wifi作为热点时就存在这样的问题了。在此记录下该问题解决进程:

    1.IOS 参考http://www.jianshu.com/p/4db47d556e00 可以解决

    2.安卓目前还没有找到可行方法,网上有大牛解决了,不过需要root,对我们来说不可行。

      一些参考:http://blog.csdn.net/roger__wong/article/details/8603275


    展开全文
  • 打开和关闭wifi和移动数据链接,能够控制移动数据链接和wifi打开和关闭
  • 老套路线上效果图 以前又adb wifi可以使用,不过那是17年...3.先用数据线插上电脑链接AS,查看是否又Log输出,如果有,你将你的手机连接WiFi必须保证和电脑是同一个WiFi 4.你再点击步骤二插件安装成功后工具栏出现的a
  • 判断是否开启网络,wifi或是移动网路亦或者是关闭网络,很适合初学者,我这也是看了大神的博客,之后照着写的一个测试demo
  • 关于ESP32开发板卡 ESP32是乐鑫推出的ESP8266的升级版,拥有更加强的性能,非常...我们采用的方案是ESP32作蓝牙串口,使用经典蓝牙可市面上许多经典蓝牙模块如,HC05等,互联,进行相应的配套设备的开发,完成设备...
  • 习惯性动作——手机连接的WiFi就关闭数据网络。...因此我们一般在开启WiFi之后,会立即关闭移动数据网络。这样能够防止我们的个人数据网络资费变高,无缘无故的增加我们的月租费用。但是,现在安卓手机已经开启了不...
  • Android WiFi开发教程(三)——WiFi热点数据传输

    万次阅读 多人点赞 2016-09-07 16:15:11
    本篇接着简单介绍手机上如何通过WiFi热点进行数据传输。跟蓝牙通讯一样,WiFi热点数据传输也是要运用到Socket。这里我创建了两个线程ConnectThread和ListenerThread,分别去处理数据传输和监听连接。ConnectThread**...
  • android系统同时使用wifi和4g上网

    万次阅读 2018-06-20 14:00:08
     android系统默认情况下,wifi连网时,4g数据链接会被强制断开,但实际有需要wifi和4g同时上网,为了满足这个要求,需要修改android的网络管理机制。 首先实现wifi连网时,不让4g数据链接被强制断开: 修改 ...
  • android实现wifi与移动数据的切换

    千次阅读 2014-05-06 18:13:11
    在网上搜索开启wifi后自动关闭移动数据,但搜到d
  • 通过ADB命令 操作系统的一些状态开关,例如开启wifi开启飞行模式,开启数据开关等 ###注意:前提是要root的手机哦 ###在Android 8.0上开启系统热点失败,正在研究中。。。 使用的 targetSdkVersion 19 如果是等于...
  • 使用Socket和ServerSocket在局网使用二台电脑 创建服务器和客户端连接,...在电脑打开Telnet服务器设置 笔记本和台式电脑拼接IP是否连接成功,笔记本打开cmd,输入ping 后面加台式电脑IP比如192.168.1.66,然后命...
  • 后来发现,手机连上WiFi后,可以通过USB数据线电脑共享网络。该方法的应用场景:(1)适用于手机能连上WiFi,电脑不能连上WiFi的情况,虽然很少出现,但我确实遇到了。(2)适用于一个WiFi账号只能连接一台设备的情况...
  • 本次课设使用的是开发箱的Zigbee模块(屏幕左面的6个模块)和arm板(右上角屏幕做WiFi数据传输)实现Zigbee组建网状网络,采集传感器数据并通过arm板外接usb无线网卡将数据传到pc,最后对url中的json格式传感器数据...
  • Android判断网络连接是否可用,WiFi、移动数据是否打开等 添加权限 代码 //判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivityManager =...
  • 可以通过手机信号获取基站信息,然后调用第三方公开数据资源,根据基站ID信息(CID)查找基站的经纬度值,这样获得的是一个绝对位置,再通过信号强度衰减公式,得到一个相对距离,通过几何关系,进行三点定位解算...
  • 整理中
  • 手机移动数据伪装wifi模块...应用介绍:手机移动数据伪装wifi软件,帮你一键实现wifi数据互相伪装娱乐,非常实用!【相关软件】https://www.lanzoux.com/b04yhzkri密码:5x5g使用方法:第一个模拟器也就是母盘 装进去...
  • WiFi 扫描链接/数据传输 (含demo)

    千次阅读 2018-05-09 21:11:32
    待续···· 文件参考: Android手机通过wifi进行数据传输 ... Android WiFi开发教程(一)——WiFi热点的创建关闭 https://blog.csdn.net/a1533588867/article/details/52459284...
  • 最近很多厂商推送了...如果应用以 Android 10 或更高版本为目标平台,并且应用不是系统应用或 DPC,则下列方法不会返回有用数据: getConfiguredNetworks() 方法始终返回空列表。 每个返回整数值的网络操作方法
  • 使用WIFI模块MQTT服务器进行透传数据通讯(M0E1系列)前言具体步骤进入AT指令模式配置相应的AT指令说明 前言 M0E1系列模组,是基于ESP8266开发的WIFI模块。经过固件的不断迭代,目前已经演化出两个版本的标准...
  • Android手机通过wifi进行数据传输(二)
  • WIfi Socket数据传输

    千次阅读 2017-06-28 18:48:14
    在同一个局域网中我们是可以利用Socket进行通信的,所以当两台手机通过wifi连接的时候,并可以通过socket进行通信了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,996
精华内容 24,798
关键字:

wifi与数据同时打开