Android5.0基础上到Android7.0,Android都自带了以太网的设置功能,基本上都是将ip地址和网关之类的信息通过StaticIpConfiguration该对象实现联网功能。到了Android 8.1 如果还是照着7.0的来写,可能会出现配置了基本信息,却不能通过静态ip上网的情况。不要问我怎么知道的,因为我就是碰到这个 坑了。

我默认你们已经知道怎么去实现设置ip的功能。在这个基础上,我们只需要修改一下framework层的代码就好。

设置静态ip的代码:

Editor etherEditor = etherModePreferences.edit();

etherEditor.putString("ether_mode", "STATIC");

etherEditor.commit();

try {

StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration();

InetAddress mIpAddr = NetworkUtils.numericToInetAddress(mIpaddr.getText().toString());

String[] strs = mMask.getText().toString().split("\\.");

int count = 0;

for(String str : strs){

if(str.equals("255")){

count++;

}

}

int prefixLength = count*8;

LinkAddress mIpAddress = new LinkAddress(mIpAddr,prefixLength);

InetAddress mGateway = NetworkUtils.numericToInetAddress(mGw.getText().toString());

ArrayList mDnsServers = new ArrayList();

mDnsServers.add(NetworkUtils.numericToInetAddress(mDns1.getText().toString()));

mDnsServers.add(NetworkUtils.numericToInetAddress(mDns2.getText().toString()));

staticIpConfiguration.ipAddress = mIpAddress;

staticIpConfiguration.gateway = mGateway;

staticIpConfiguration.dnsServers.addAll(mDnsServers);

config = new IpConfiguration(IpAssignment.STATIC, ProxySettings.NONE, staticIpConfiguration, ProxyInfo.buildDirectProxy(null,0));

mEthManager.setConfiguration(config);

}catch (Exception e) {

e.printStackTrace();

}

[点击并拖拽以移动]

通过上面的代码可以把静态ip地址设置,但是你发现你只写了这写方法并不能用以太网实现联网功能。这个时候我们就需要修改

frameworks\opt\net\ethernet\java\com\android\server\ethernet目录下面的EthernetNetworkFactory文件,代码如下:

public void startIpManager() {

if (DBG) {

Log.d(TAG, String.format("starting IpManager(%s): mNetworkInfo=%s", mIface,

mNetworkInfo));

}

LinkProperties linkProperties;

IpConfiguration config = mEthernetManager.getConfiguration();

if (config.getIpAssignment() == IpAssignment.STATIC) {

if (!setStaticIpAddress(config.getStaticIpConfiguration())) {

// We've already logged an error.

return;

}

linkProperties = config.getStaticIpConfiguration().toLinkProperties(mIface);

/* } else {

mNetworkInfo.setDetailedState(DetailedState.OBTAINING_IPADDR, null, mHwAddr);

IpManager.Callback ipmCallback = new IpManager.Callback() {

@Override

public void onProvisioningSuccess(LinkProperties newLp) {

mHandler.post(() -> onIpLayerStarted(newLp));

}

@Override

public void onProvisioningFailure(LinkProperties newLp) {

mHandler.post(() -> onIpLayerStopped(newLp));

}

@Override

public void onLinkPropertiesChange(LinkProperties newLp) {

mHandler.post(() -> updateLinkProperties(newLp));

}

};

stopIpManager();

mIpManager = new IpManager(mContext, mIface, ipmCallback); */

if (config.getProxySettings() == ProxySettings.STATIC ||

config.getProxySettings() == ProxySettings.PAC) {

// mIpManager.setHttpProxy(config.getHttpProxy());

linkProperties.setHttpProxy(config.getHttpProxy());

}

/* final String tcpBufferSizes = mContext.getResources().getString(

com.android.internal.R.string.config_ethernet_tcp_buffers); */

String tcpBufferSizes = mContext.getResources().getString(

com.android.internal.R.string.config_ethernet_tcp_buffers);

/* if (!TextUtils.isEmpty(tcpBufferSizes)) {

mIpManager.setTcpBufferSizes(tcpBufferSizes);

} */

if (TextUtils.isEmpty(tcpBufferSizes) == false) {

linkProperties.setTcpBufferSizes(tcpBufferSizes);

}

} else {

mNetworkInfo.setDetailedState(DetailedState.OBTAINING_IPADDR, null, mHwAddr);

}

/* final ProvisioningConfiguration provisioningConfiguration =

mIpManager.buildProvisioningConfiguration()

.withProvisioningTimeoutMs(0)

.build();

mIpManager.startProvisioning(provisioningConfiguration); */

// }

IpManager.Callback ipmCallback = new IpManager.Callback() {

@Override

public void onProvisioningSuccess(LinkProperties newLp) {

mHandler.post(() -> onIpLayerStarted(newLp));

}

@Override

public void onProvisioningFailure(LinkProperties newLp) {

mHandler.post(() -> onIpLayerStopped(newLp));

}

@Override

public void onLinkPropertiesChange(LinkProperties newLp) {

mHandler.post(() -> updateLinkProperties(newLp));

}

};

stopIpManager();

mIpManager = new IpManager(mContext, mIface, ipmCallback);

if (config.getProxySettings() == ProxySettings.STATIC ||

config.getProxySettings() == ProxySettings.PAC) {

mIpManager.setHttpProxy(config.getHttpProxy());

}

final String tcpBufferSizes = mContext.getResources().getString(

com.android.internal.R.string.config_ethernet_tcp_buffers);

if (!TextUtils.isEmpty(tcpBufferSizes)) {

mIpManager.setTcpBufferSizes(tcpBufferSizes);

}

if (config.getIpAssignment() == IpAssignment.STATIC) {

mIpManager.startProvisioning(config.getStaticIpConfiguration());

} else {

final ProvisioningConfiguration provisioningConfiguration =

mIpManager.buildProvisioningConfiguration()

.withProvisioningTimeoutMs(0)

.build();

mIpManager.startProvisioning(provisioningConfiguration);

}

}

通过设置修改以上代码就可以实现上网功能了。希望能对需要的人有用。

android 8 修改ip,android 8.1 framework层修改以太网静态ip功能相关推荐

  1. Android P 9.0 MTK平台 增加以太网静态IP功能

    前言 朋友们,最近又开始搞 Android P了,同样的以太网静态 IP 是少不了的功能,今天我们就开始来整一下.之前弄6.0 和 8.1 的都 ok 了. 没想到 9.0 改动还是略微有点大的.来来 ...

  2. Android10.0(Q) MTK平台增加以太网静态IP功能

    前言 朋友们,网卡功能真的是太太太太常用了,这次我又带着 10.0 的以太网静态IP功能来了,相比 9.0 而言, framework 没啥大变化,可以直接对比移植.Settings 部分也没啥大变化 ...

  3. TCP/IP协议简述(OSI7层模型与TCP/IP协议)

    TCP/IP协议简述(OSI7层模型与TCP/IP协议) OSI7层模型与TCP/IP协议本身没有太直接的关联,从名字也不难看出.一个是作为标准体系.参考模型(这个参考模型中其实也是有一些具体协议的) ...

  4. Android 原生设置收到消息后亮屏(framework层修改)

    最近碰到一个这样的需求,说是要收到任何消息后若手机处在锁屏状态时要自动亮屏,开始拿到这个需求后有点蒙,对于一个小安卓的我来说,感觉根本无从下手呀,但是客户是上帝(其实就是经理是上帝),没办法,身为底层 ...

  5. Android 10 默认配置以太网静态IP

    代码路径: device/sprd/sharkl3/uis8581a2h10/system.prop frameworks/opt/net/ethernet/java/com/android/serv ...

  6. 2019-8-19 [Linux] 3.为什么要修改静态IP IP的获取有几种方式 设置静态IP后无法Ping百度怎么办 可以ping后CRT无法连接怎么办

    文章目录 3.修改linux系统的静态IP 问题1 : 为什么要修改静态IP? 问题2 : IP的获取有几种方式? 手动或者自动 验证是否可以正常上网 ping一下百度 看一下是否可以正常上网 问题3 ...

  7. 小米手机修改ip代理服务器,小米手机如何设置和更改静态IP地址

    想必大家都遇到过手机连接wifi正在获取ip地址,获取好长时间也连不上,或者连接时间长,需要花费很多时间去等待的情况吧.因为大多数路由器的默认设置是DHCP会对每个接入的设备自动分配一个IP地址,但有 ...

  8. 路由器桥接静态ip设置_如何在路由器上设置静态IP地址

    路由器桥接静态ip设置 Routers both modern and antiquated allow users to set static IP addresses for devices on ...

  9. windows server 2012虚拟机IP地址冲突导致其中一台虚拟机除了静态IP外还自动分配了169的IP

    一.背景 由于物理环境原因,需要将一台windows 2012的虚拟机拷贝到另一台物理机,在拷贝之后就开始了配置操作,完全忘记原来的虚拟机关机. 二.现象 在拷贝后的虚拟机中,网卡配置信息显示除了手工 ...

最新文章

  1. BIG DATA 大数据时代来临
  2. 【九度OJ】题目1206:字符串连接
  3. spark VS Hadoop 两大大数据分析系统深度解读
  4. 运算放大器的好坏判别方法
  5. ie下js不执行的几种可能
  6. 第三次学JAVA再学不好就吃翔(part37)--接口概述
  7. 图论--边双连通V-DCC缩点
  8. Redis运维和开发学习目录
  9. php zhxing iptables,Linux iptables 扩展 ipset 使用教程
  10. 2017-2018-1 20155229 《信息安全系统设计基础》第八周学习总结
  11. R语言生存分析之竞争风险模型
  12. ubuntu18.04清理磁盘空间
  13. mysql 8.0 配置文件my.cnf中文注解
  14. 一台计算机怎样介绍自己,一台电脑的自我介绍作文
  15. 前序+中序 =〉后序
  16. java中使用length获取二维数组的长度
  17. 【ps合成】给男票做个Q版大头像
  18. 赠书福利丨我们人类与人工智能技术究竟是怎样的关系?
  19. char、nchar、varchar、nvarchar的区别和特点
  20. mybatis的insert语句获取自增id的方法(mySQL)

热门文章

  1. 计算机管理员不受限制访问,Win10专业版管理员账户被禁用怎么办?
  2. 如何把20秒熊本熊GIF图发送给微信好友
  3. 计算机组装显示器,组装电脑时显示器看什么参数?
  4. Eclipse设置Theme主题颜色
  5. (软件工程复习核心重点)第八章面向对象方法学-第一节:面向对象方法学概述
  6. android js shell,使用adb shell+node.js实现抖音自动抢红包
  7. JS画板图片上传到服务器Python
  8. 联想小新Air14 锐龙 换屏
  9. 国外问卷调查常见的几个类型
  10. http post发送图片