android 8 修改ip,android 8.1 framework层修改以太网静态ip功能
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功能相关推荐
- Android P 9.0 MTK平台 增加以太网静态IP功能
前言 朋友们,最近又开始搞 Android P了,同样的以太网静态 IP 是少不了的功能,今天我们就开始来整一下.之前弄6.0 和 8.1 的都 ok 了. 没想到 9.0 改动还是略微有点大的.来来 ...
- Android10.0(Q) MTK平台增加以太网静态IP功能
前言 朋友们,网卡功能真的是太太太太常用了,这次我又带着 10.0 的以太网静态IP功能来了,相比 9.0 而言, framework 没啥大变化,可以直接对比移植.Settings 部分也没啥大变化 ...
- TCP/IP协议简述(OSI7层模型与TCP/IP协议)
TCP/IP协议简述(OSI7层模型与TCP/IP协议) OSI7层模型与TCP/IP协议本身没有太直接的关联,从名字也不难看出.一个是作为标准体系.参考模型(这个参考模型中其实也是有一些具体协议的) ...
- Android 原生设置收到消息后亮屏(framework层修改)
最近碰到一个这样的需求,说是要收到任何消息后若手机处在锁屏状态时要自动亮屏,开始拿到这个需求后有点蒙,对于一个小安卓的我来说,感觉根本无从下手呀,但是客户是上帝(其实就是经理是上帝),没办法,身为底层 ...
- Android 10 默认配置以太网静态IP
代码路径: device/sprd/sharkl3/uis8581a2h10/system.prop frameworks/opt/net/ethernet/java/com/android/serv ...
- 2019-8-19 [Linux] 3.为什么要修改静态IP IP的获取有几种方式 设置静态IP后无法Ping百度怎么办 可以ping后CRT无法连接怎么办
文章目录 3.修改linux系统的静态IP 问题1 : 为什么要修改静态IP? 问题2 : IP的获取有几种方式? 手动或者自动 验证是否可以正常上网 ping一下百度 看一下是否可以正常上网 问题3 ...
- 小米手机修改ip代理服务器,小米手机如何设置和更改静态IP地址
想必大家都遇到过手机连接wifi正在获取ip地址,获取好长时间也连不上,或者连接时间长,需要花费很多时间去等待的情况吧.因为大多数路由器的默认设置是DHCP会对每个接入的设备自动分配一个IP地址,但有 ...
- 路由器桥接静态ip设置_如何在路由器上设置静态IP地址
路由器桥接静态ip设置 Routers both modern and antiquated allow users to set static IP addresses for devices on ...
- windows server 2012虚拟机IP地址冲突导致其中一台虚拟机除了静态IP外还自动分配了169的IP
一.背景 由于物理环境原因,需要将一台windows 2012的虚拟机拷贝到另一台物理机,在拷贝之后就开始了配置操作,完全忘记原来的虚拟机关机. 二.现象 在拷贝后的虚拟机中,网卡配置信息显示除了手工 ...
最新文章
- BIG DATA 大数据时代来临
- 【九度OJ】题目1206:字符串连接
- spark VS Hadoop 两大大数据分析系统深度解读
- 运算放大器的好坏判别方法
- ie下js不执行的几种可能
- 第三次学JAVA再学不好就吃翔(part37)--接口概述
- 图论--边双连通V-DCC缩点
- Redis运维和开发学习目录
- php zhxing iptables,Linux iptables 扩展 ipset 使用教程
- 2017-2018-1 20155229 《信息安全系统设计基础》第八周学习总结
- R语言生存分析之竞争风险模型
- ubuntu18.04清理磁盘空间
- mysql 8.0 配置文件my.cnf中文注解
- 一台计算机怎样介绍自己,一台电脑的自我介绍作文
- 前序+中序 =〉后序
- java中使用length获取二维数组的长度
- 【ps合成】给男票做个Q版大头像
- 赠书福利丨我们人类与人工智能技术究竟是怎样的关系?
- char、nchar、varchar、nvarchar的区别和特点
- mybatis的insert语句获取自增id的方法(mySQL)