`
Leif_冬
  • 浏览: 47953 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

android 8.0 設置Ethernet的靜態IP

阅读更多

設置靜態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-Android8.0Broadcast静态注册自动转为动态注册

    本文将深入探讨Android 8.0中静态BroadcastReceiver自动转换为动态注册的过程,以及这对Android开发者的影响。 一、BroadcastReceiver概述 BroadcastReceiver是Android中的一个重要组件,它允许应用程序接收并响应...

    Android8.0 源代码(O)

    【Android 8.0 源代码(O)详解】 Android 8.0,代号为"Oreo",是谷歌发布的安卓操作系统的一个重大更新,带来了许多性能优化、安全改进和用户界面的调整。源代码作为开发者的宝藏,揭示了系统内部的工作原理,提供...

    android8.0 SDK包android26

    Android 8.0 SDK包(Android 26)是开发者为构建、测试和优化在Android 8.0操作系统上运行的应用程序所必需的核心组件。这个SDK包包含了多种工具,包括API文档、平台库、构建工具以及用于调试和模拟的工具。下面我们...

    android8.0 api

    Android 8.0,代号Oreo,是Google在2017年发布的一个重要的操作系统更新,对开发者和用户都带来了许多新特性和改进。这个API级别26的更新不仅提升了系统的性能和效率,还引入了一系列针对应用开发的优化,旨在帮助...

    Android8.0系统允许安装未知来源权限

    在Android 8.0之前,用户可以在系统设置中全局开启或关闭“允许来自此来源的应用安装”选项,这会影响所有应用的安装行为。然而,这样的设定可能导致安全性问题,因为一旦开启,任何恶意应用都可以未经用户许可就...

    Android Oreo8.0.rar

    Android 8.0的NotoColorEmoji.ttf文件,push进自己android的/system/fonts目录替换,可以使手机显示Android 8.0风格的emoji。 注意:解压后需要修改修改文件名为NotoColorEmoji.ttf,并且记得备份原文件,以备...

    Android8.0 APP更新

    在Android 8.0系统中,应用程序的更新和文件分享是两个重要的功能,它们涉及到用户交互、系统安全以及用户体验等多个方面。以下将详细介绍这两个知识点。 首先,我们来谈谈"Android 8.0 APP更新"。Android 8.0,又...

    android-ethernet-staticIP-app,安卓-以太网设置-app

    这个是api 21~25(android 5.0.1-7.1.1)能用的app源码,使用eclipse+adt开发(不习惯用AS),android8.0(api26)因时间原因未能测试是否可用。不过android10.0因为api变化被证明肯定不能用。里面除了源码、还有...

    Android 8.0 系统自带 DeskClock

    DeskClock 是 Android 8.0 系统中的一个重要组件,它是内置的时钟应用,集成了多种实用功能,包括闹钟、计时器、秒表和世界时钟。这款应用为用户提供了方便的时间管理和提醒服务,是 Android 设备日常使用不可或缺的...

    Android 8.0 系统自带 SoundRecoder

    - **与早期版本的区别**:相较于 Android 之前的版本,8.0 的 SoundRecorder 可能拥有更稳定的性能、更多的设置选项以及更好的兼容性。 - **与其他录音应用的对比**:尽管许多第三方录音应用提供了更多高级功能,...

    android8.0-API26-CH.rar

    1. **通知系统的改进**:Android 8.0 引入了“频道通知”,允许用户对不同类型的推送消息进行精细控制,开发者可以创建多个通知频道,每个频道拥有独立的设置,用户可以在设置中选择关闭不希望接收的特定类型通知。...

    Android 8.0 Launcher开发指南

    Android 8.0(代号Oreo)对Launcher进行了诸多改进,以提升用户体验和开发者效率。本指南将深入探讨如何在Android 8.0上进行Launcher的开发工作。 1. **Android 8.0 API更改** Android 8.0引入了一些重要的API更新...

    android8.0 framework jar包

    用于第三方android客户端开发,有部分权限api可以使用,如热点,wifi等api

    android 8.0系统应用图标适配1

    在Android 8.0(API级别26)中,系统引入了新的图标规范,以提供更统一、更美观的用户体验。对于开发者来说,这意味着需要适配新的图标要求以确保应用在新系统上的显示效果。以下是关于如何进行Android 8.0系统应用...

    Android 8.0指纹验证

    在Android 8.0系统中,指纹验证是一个重要的安全特性,它允许用户通过他们的生物识别信息来保护设备和应用程序的数据。这一功能对于开发者来说,意味着需要理解和集成Android的指纹认证API,以提供更加安全和便捷的...

    Android 8.0不能自动安装APK问题的解决方法(完美适配)

    Android8.0之前 未知应用安装权限默认开启,如下图所示 8.0以下手机未知应用安装权限.png Android8.0之后 未知应用安装权限默认关闭,且权限入口隐藏。 如何开启未知应用安装权限的入口,并设置允许安装? 在...

    Android 8.0系统通知栏适配Demo

    本Demo主要针对Android 8.0(API级别26,也称为Oreo)进行适配,以展示如何正确创建和管理通知,以充分利用新系统的特性。 在Android 8.0中,通知有了以下几个显著的变化: 1. **渠道(Channels)**:Android 8.0...

    Android 8.0 Launcher3 的源代码

    Android 8.0 Launcher3 的源代码是Android操作系统的一个核心组件,主要负责用户界面的启动器功能,也就是桌面环境。这个版本的Launcher3在Android 8.0(Oreo)中进行了优化和改进,旨在提供更高效、更流畅的用户...

    android8.0 API26.zip

    android8.0-API26.CHM中文版chmandroid8.0-API26.CHM中文版chmandroid8.0-android8.0-API26.CHM中文版chmAPI26.CHM中文版chmandroid8.0-API26.CHM中文版chm

    SELinux For Android8.0 && SELinux 4.0

    Android Treble是Android 8.0引入的一项重大改变,旨在提高Android系统的更新速度和兼容性。在这个框架下,HAL(硬件抽象层)被分离出来,使得系统固件更新与底层硬件驱动的更新解耦。SELinux在Treble架构中起到了...

Global site tag (gtag.js) - Google Analytics