Android4.2 以太网Ethernet DHCP和静态设置实现

前提:下面涉及的内容均需要系统权限,也就是系统应用,开发非系统app则饶边。

 

以太网设置一般是进入系统原生的设置APP,进入到以太网选项进行设置的。在一些专用场合,需要定制APP,不直接调用系统的设置,那么就要自己实现以太网动态和静态的设置。

 

权限:

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

 

EthernetDevInfo类有以下成员:

private String dev_name;
private String ipaddr; // IP地址
private String netmask; // 子网掩码
private String gw; // 网关设置
private String dns; // DNS设置
private int mode; // 模式设置:静态或者动态
private String hwaddr; // MAC地址

 

一、获取EthernetManager实例

private EthernetManager mEthManager;

private EthernetDevInfo mDevInfo;

mEthManager = EthernetManager.getInstance();

 

二、填充mDevInfo

静态:

mDevInfo = mEthManager.getSavedConfig();
mDevInfo.setConnectMode(EthernetDevInfo.ETHERNET_CONN_MODE_MANUAL);
mDevInfo.setIpAddress("XXX");
mDevInfo.setNetMask("XXX");
mDevInfo.setDnsAddr("XXX");
mDevInfo.setGateWay("XXX");

mDevInfo.setHwaddr("XXX"); // getSavedConfig获取的mac地址为null,需要主动填充地址,否则进入系统设置会因为地址null崩溃

 

动态:

mDevInfo = mEthManager.getSavedConfig();
mDevInfo.setConnectMode(EthernetDevInfo.ETHERNET_CONN_MODE_DHCP);

mDevInfo.setHwaddr("XXX");

 

三、更新配置信息并enable ethernet service

mEthManager.updateDevInfo(mDevInfo);
mEthManager.setEnabled(true);

 

更多详情可参考:

frameworks/base/ethernet/java/android/net/ethernet/EthernetManager.java

frameworks/base/ethernet/java/android/net/ethernet/EthernetDevInfo.java

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在 Android 11 上设置以太网静态 IP 路由,可以使用以下代码实现: 1. 添加权限到 AndroidManifest.xml 文件中: ``` <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> ``` 2. 在代码中添加以下代码: ```java // 获取 ConnectivityManager ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 获取当前活动网络信息 Network activeNetwork = connectivityManager.getActiveNetwork(); // 获取 Ethernet 网络信息 NetworkInfo ethernetNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET); // 判断 Ethernet 网络是否已连接 if (ethernetNetworkInfo.isConnected()) { // 获取 Ethernet 网络的网络 ID int ethernetNetworkId = ethernetNetworkInfo.getNetworkId(); // 创建一个 Ethernet 网络的路由信息 RouteInfo ethernetRouteInfo = new RouteInfo(new IpPrefix("192.168.0.0/24"), null, "eth0", RouteInfo.RTN_UNICAST); // 获取 Wi-Fi 网络信息 NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); // 判断 Wi-Fi 网络是否已连接 if (wifiNetworkInfo.isConnected()) { // 获取 Wi-Fi 网络的网络 ID int wifiNetworkId = wifiNetworkInfo.getNetworkId(); // 创建一个 Wi-Fi 网络的路由信息 RouteInfo wifiRouteInfo = new RouteInfo(new IpPrefix("192.168.1.0/24"), null, "wlan0", RouteInfo.RTN_UNICAST); // 创建一个路由表 RouteTable routeTable = new RouteTable(); // 添加路由信息到路由表中 routeTable.add(ethernetRouteInfo); routeTable.add(wifiRouteInfo); // 设置路由表到 Ethernet 网络 connectivityManager.setNetworkRoutes(ethernetNetworkId, routeTable); // 设置路由表到 Wi-Fi 网络 connectivityManager.setNetworkRoutes(wifiNetworkId, routeTable); } } ``` 上述代码中,我们首先获取 ConnectivityManager 对象,并获取当前活动网络信息和 Ethernet 网络信息。如果 Ethernet 网络已连接,则获取 Ethernet 网络的网络 ID,并创建一个 Ethernet 网络的路由信息。接着,我们获取 Wi-Fi 网络信息,如果 Wi-Fi 网络已连接,则获取 Wi-Fi 网络的网络 ID,并创建一个 Wi-Fi 网络的路由信息。最后,我们创建一个路由表,并将路由信息添加到路由表中。最后,我们将路由表设置Ethernet 网络和 Wi-Fi 网络中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值