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

以下是基于7.1.1系统,遇到一个需求,需要在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替换系统固件即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值