以下是基于7.1.1系统,遇到一个需求,需要在wifi开启情况下也显示出移动网络的ip。平时使用的时候wifi开启情况下,数据网络默认是关闭了,所以是获取不到IP的
现象
- 开数据情况下,用ifconfg查看网口:
能看到有数据网络的网口,此时是没有wifi网口的
- 在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;
}
这里是通过名称来过滤的移动网络,不具有普遍性,如果是定制设备,那么是可以满足的了
保持开关常开
为了保持开关常开,需要修改系统配置。
- 配置文件路径:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
- 在文件中添加开关:
如果有就修改,没有就添加以下字段内容:
<integer name="def_mobile_data_always_on">1</integer>
- 重新编译SettingsProvider替换系统固件即可