設置靜態IP的方法如下:
... mEthManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE); ... private void setEthernetConfig(){ try { StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration(); InetAddress mIpAddr = NetworkUtils.numericToInetAddress(tIpAddressString); LinkAddress mIpAddress = new LinkAddress(mIpAddr,tNetworkPrefixLength); InetAddress mGateway = NetworkUtils.numericToInetAddress(tGatewayString); ArrayList<InetAddress> mDnsServers = new ArrayList<InetAddress>(); mDnsServers.add(NetworkUtils.numericToInetAddress(tDnsFirstString)); mDnsServers.add(NetworkUtils.numericToInetAddress(tDnsSecondString)); staticIpConfiguration.ipAddress = mIpAddress; staticIpConfiguration.gateway = mGateway; staticIpConfiguration.dnsServers.addAll(mDnsServers); if(mConnectionTypeSelect.contains(CONNECT_TYPE_STATIC)) { if (mStaticProxySelect.contains(PROXY_NONE)) { config = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.NONE, staticIpConfiguration, null); } else if (mStaticProxySelect.contains(PROXY_STATIC)) { config = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.STATIC, staticIpConfiguration, ProxyInfo.buildDirectProxy(null, 0)); } else if (mStaticProxySelect.contains(PROXY_PAC)) { config = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.PAC, staticIpConfiguration, ProxyInfo.buildDirectProxy(null, 0)); } else if (mStaticProxySelect.contains(PROXY_UNASSIGNED)) { config = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.UNASSIGNED, staticIpConfiguration, ProxyInfo.buildDirectProxy(null, 0)); } else { config = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.NONE, staticIpConfiguration, null); } }else{ config = new IpConfiguration(IpConfiguration.IpAssignment.DHCP, IpConfiguration.ProxySettings.NONE, null, ProxyInfo.buildDirectProxy(null,0)); } mEthManager.setConfiguration(config); }catch (Exception e){ e.printStackTrace(); } Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_CONNECTION_TYPE, mConnectionTypeSelect); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_IP, tIpAddressString); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_GATEWAY, tGatewayString); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_SUBMASK, tSubMaskString); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_DNS_FIRST, tDnsFirstString); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_DNS_SECOND, tDnsSecondString); Settings.System.putString(mContext.getContentResolver(), Settings.System.KEY_ETHERNET_STATIC_PROXY, mStaticProxySelect); }
設置好之後需要在/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java 中做如下處理[不然會出現ifconfig 可以看到設置的static IP,但是不能上網,設置中也不能看到IP]
leif@leif:~/Git/Arashi9500/LA.UM.6.2/LINUX/android/frameworks/opt/net/ethernet$ git diff diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java index d786b4a..308e183 100644 --- a/java/com/android/server/ethernet/EthernetNetworkFactory.java +++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java @@ -349,44 +349,60 @@ class EthernetNetworkFactory { 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( + 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); + } + 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.0中静态BroadcastReceiver自动转换为动态注册的过程,以及这对Android开发者的影响。 一、BroadcastReceiver概述 BroadcastReceiver是Android中的一个重要组件,它允许应用程序接收并响应...
【Android 8.0 源代码(O)详解】 Android 8.0,代号为"Oreo",是谷歌发布的安卓操作系统的一个重大更新,带来了许多性能优化、安全改进和用户界面的调整。源代码作为开发者的宝藏,揭示了系统内部的工作原理,提供...
Android 8.0 SDK包(Android 26)是开发者为构建、测试和优化在Android 8.0操作系统上运行的应用程序所必需的核心组件。这个SDK包包含了多种工具,包括API文档、平台库、构建工具以及用于调试和模拟的工具。下面我们...
Android 8.0,代号Oreo,是Google在2017年发布的一个重要的操作系统更新,对开发者和用户都带来了许多新特性和改进。这个API级别26的更新不仅提升了系统的性能和效率,还引入了一系列针对应用开发的优化,旨在帮助...
在Android 8.0之前,用户可以在系统设置中全局开启或关闭“允许来自此来源的应用安装”选项,这会影响所有应用的安装行为。然而,这样的设定可能导致安全性问题,因为一旦开启,任何恶意应用都可以未经用户许可就...
Android 8.0的NotoColorEmoji.ttf文件,push进自己android的/system/fonts目录替换,可以使手机显示Android 8.0风格的emoji。 注意:解压后需要修改修改文件名为NotoColorEmoji.ttf,并且记得备份原文件,以备...
在Android 8.0系统中,应用程序的更新和文件分享是两个重要的功能,它们涉及到用户交互、系统安全以及用户体验等多个方面。以下将详细介绍这两个知识点。 首先,我们来谈谈"Android 8.0 APP更新"。Android 8.0,又...
这个是api 21~25(android 5.0.1-7.1.1)能用的app源码,使用eclipse+adt开发(不习惯用AS),android8.0(api26)因时间原因未能测试是否可用。不过android10.0因为api变化被证明肯定不能用。里面除了源码、还有...
DeskClock 是 Android 8.0 系统中的一个重要组件,它是内置的时钟应用,集成了多种实用功能,包括闹钟、计时器、秒表和世界时钟。这款应用为用户提供了方便的时间管理和提醒服务,是 Android 设备日常使用不可或缺的...
- **与早期版本的区别**:相较于 Android 之前的版本,8.0 的 SoundRecorder 可能拥有更稳定的性能、更多的设置选项以及更好的兼容性。 - **与其他录音应用的对比**:尽管许多第三方录音应用提供了更多高级功能,...
1. **通知系统的改进**:Android 8.0 引入了“频道通知”,允许用户对不同类型的推送消息进行精细控制,开发者可以创建多个通知频道,每个频道拥有独立的设置,用户可以在设置中选择关闭不希望接收的特定类型通知。...
Android 8.0(代号Oreo)对Launcher进行了诸多改进,以提升用户体验和开发者效率。本指南将深入探讨如何在Android 8.0上进行Launcher的开发工作。 1. **Android 8.0 API更改** Android 8.0引入了一些重要的API更新...
用于第三方android客户端开发,有部分权限api可以使用,如热点,wifi等api
在Android 8.0(API级别26)中,系统引入了新的图标规范,以提供更统一、更美观的用户体验。对于开发者来说,这意味着需要适配新的图标要求以确保应用在新系统上的显示效果。以下是关于如何进行Android 8.0系统应用...
在Android 8.0系统中,指纹验证是一个重要的安全特性,它允许用户通过他们的生物识别信息来保护设备和应用程序的数据。这一功能对于开发者来说,意味着需要理解和集成Android的指纹认证API,以提供更加安全和便捷的...
Android8.0之前 未知应用安装权限默认开启,如下图所示 8.0以下手机未知应用安装权限.png Android8.0之后 未知应用安装权限默认关闭,且权限入口隐藏。 如何开启未知应用安装权限的入口,并设置允许安装? 在...
本Demo主要针对Android 8.0(API级别26,也称为Oreo)进行适配,以展示如何正确创建和管理通知,以充分利用新系统的特性。 在Android 8.0中,通知有了以下几个显著的变化: 1. **渠道(Channels)**:Android 8.0...
Android 8.0 Launcher3 的源代码是Android操作系统的一个核心组件,主要负责用户界面的启动器功能,也就是桌面环境。这个版本的Launcher3在Android 8.0(Oreo)中进行了优化和改进,旨在提供更高效、更流畅的用户...
android8.0-API26.CHM中文版chmandroid8.0-API26.CHM中文版chmandroid8.0-android8.0-API26.CHM中文版chmAPI26.CHM中文版chmandroid8.0-API26.CHM中文版chm
Android Treble是Android 8.0引入的一项重大改变,旨在提高Android系统的更新速度和兼容性。在这个框架下,HAL(硬件抽象层)被分离出来,使得系统固件更新与底层硬件驱动的更新解耦。SELinux在Treble架构中起到了...