Wifi开启情况下获取移动网络的Ip

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ddxxii/article/details/90169050

遇到一个需求,需要在wifi开启情况下也显示出移动网络的ip。平时使用的时候wifi开启情况下,数据网络默认是关闭了,所以是获取不到IP的

现象

  1. 开数据情况下,用ifconfg查看网口:

能看到有数据网络的网口,此时是没有wifi网口的

  1. 在1步基础上开wifi,用ifconfig查看网口:

现象:数据网络的网口关了,出现了wifi的wlan0网口

原因和处理

原因:Android设备默认是在wifi开启情况下关闭了数据网络的

处理: 开发者选项,勾选始终开启移动数据网络

然后再进行前面的操作,就能看到wifi和数据网络都显示出来了

现在能看到同时存在了,那么就有办法获取ip了,代码:

public static String getMobileIPAddress(Context context) {
        NetworkInfo info = ((ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        String ip = "";
        if (info != null && info.isConnected()) {
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    String name = intf.getName();
                    //名称方式过滤移动网络
                    if (name == null || !name.startsWith("rmnet")) {
                        continue;
                    }
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                            if (!"".equals(inetAddress.getHostAddress())) {
                                ip = inetAddress.getHostAddress();
                            }
                        }
                    }
                }
                return ip;
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
        return ip;
    }

这里是通过名称来过滤的移动网络,不具有普遍性,如果是定制设备,那么是可以满足的了

保持开关常开

为了保持开关常开,需要修改系统配置。

  1. 配置文件路径:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  1. 在文件中添加开关:

如果有就修改,没有就添加以下字段内容:

<integer name="def_mobile_data_always_on">1</integer>
  1. 重新编译SettingsProvider替换系统固件即可
展开阅读全文

没有更多推荐了,返回首页