Android11 设置备用DNS

在Android11 版本的rom 产品开发过程中,遇到一个问题,发现分配的DNS不可用的情况,所以需要设置备用DNS。

直接上代码

//frameworks/base/services/core/java/com/android/server/ConnectivityService
//ConnectivityService.java -->
//updateLinkProperties() -->
//updateDnses(newLp, oldLp, netId);private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) {if (oldLp != null && newLp.isIdenticalDnses(oldLp)) {return;  // no updating necessary}final NetworkAgentInfo defaultNai = getDefaultNetwork();final boolean isDefaultNetwork = (defaultNai != null && defaultNai.network.netId == netId);if (DBG) {final Collection<InetAddress> dnses = newLp.getDnsServers();log("Setting DNS servers for network " + netId + " to " + dnses);}try {mDnsManager.noteDnsServersForNetwork(netId, newLp);// TODO: netd should listen on [::1]:53 and proxy queries to the current// default network, and we should just set net.dns1 to ::1, not least// because applications attempting to use net.dns resolvers will bypass// the privacy protections of things like DNS-over-TLS.if (isDefaultNetwork) mDnsManager.setDefaultDnsSystemProperties(newLp.getDnsServers());mDnsManager.flushVmDnsCache();} catch (Exception e) {loge("Exception in setDnsConfigurationForNetwork: " + e);}}

在这里,我们添加如下代码:

 private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) {if (oldLp != null && newLp.isIdenticalDnses(oldLp)) {return;  // no updating necessary}final NetworkAgentInfo defaultNai = getDefaultNetwork();final boolean isDefaultNetwork = (defaultNai != null && defaultNai.network.netId == netId);if (DBG) {final Collection<InetAddress> dnses = newLp.getDnsServers();log("Setting DNS servers for network " + netId + " to " + dnses);}try {//add code hereList<InetAddress> dnsServers = newLp.getDnsServers();dnsServers.add(InetAddress.getByName("xxxxxxxxxx"));dnsServers.add(InetAddress.getByName("xxxxxxxxxx"));//-----------mDnsManager.noteDnsServersForNetwork(netId, newLp);// TODO: netd should listen on [::1]:53 and proxy queries to the current// default network, and we should just set net.dns1 to ::1, not least// because applications attempting to use net.dns resolvers will bypass// the privacy protections of things like DNS-over-TLS.if (isDefaultNetwork) mDnsManager.setDefaultDnsSystemProperties(newLp.getDnsServers());mDnsManager.flushVmDnsCache();} catch (Exception e) {loge("Exception in setDnsConfigurationForNetwork: " + e);}}

添加完,单编services,发现报错,

发现报错原因在于:

   /*** Returns all the {@link InetAddress} for DNS servers on this link.** @return An unmodifiable {@link List} of {@link InetAddress} for DNS servers on*         this link.*/public @NonNull List<InetAddress> getDnsServers() {return Collections.unmodifiableList(mDnses);}

既然不能对原有的List做修改,那就曲线来一把,如下:

  List<InetAddress> oriServers = newLp.getDnsServers();List<InetAddress> dnsServers = new ArrayList<InetAddress>();dnsServers.addAll(oriServers);dnsServers.add(InetAddress.getByName("xxxxxxxxxx"));dnsServers.add(InetAddress.getByName("xxxxxxxxxx"));newLp.setDnsServers(dnsServers);

编译验证,可以看到,如果分配的DNS不可用的时候,系统就会使用备用的DNS!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【脚踢数据结构】链表(1)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言,Linux基础,ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的一句鸡汤&#x1f914;&…

机器学习基础之《特征工程(3)—特征预处理》

一、什么是特征预处理 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 处理前&#xff0c;特征值是数值&#xff0c;处理后&#xff0c;进行了特征缩放 1、包含内容 数值型数据的无量纲化&#xff1a; 归一化 标准化 2、特征预处理API sklearn.preproces…

什么是训练数据?

算法从数据中学习。算法从得到的训练数据中找到关系&#xff0c;形成理解&#xff0c;做出决策&#xff0c;并评估信心。训练数据越好&#xff0c;模型的表现就越好。 实际上&#xff0c;与算法本身一样&#xff0c;训练数据的质量和数量与数据项目的成功有很大关系。 现在&…

Java项目作业~ 通过html+Servlet+MyBatis,完成站点信息的添加功能

需求&#xff1a; 通过htmlServletMyBatis&#xff0c;完成站点信息的添加功能。 以下是站点表的建表语句&#xff1a; CREATE TABLE websites (id int(11) NOT NULL AUTO_INCREMENT,name char(20) NOT NULL DEFAULT COMMENT 站点名称,url varchar(255) NOT NULL DEFAULT ,…

html2canvas截图生成图片并保存到本地的解决方案

html2canvas截图生成图片并保存到本地的解决方案 一、构建HTML容器二、html2canvas截图封装函数避坑指南1.尺寸过大而无法成功生成图片 html2canvas是一款JavaScript插件&#xff0c;能够将网页上的HTML元素转化为Canvas对象&#xff0c;从而可以将网页截图输出为图片或者PDF文…

Go学习第八天

签名 func (a *Account) Sign(message []byte) ([]byte, error) {hash : crypto.Keccak256Hash(message)signature, err : crypto.Sign(hash.Bytes(), a.privateKeyECDSA)if err ! nil {log.Fatal(err)}signMsg : []byte(hexutil.Encode(signature))return signMsg, err }验签…

CentOS7 安装远程桌面

换源 设置镜像源为清华源&#xff1a; sudo sed -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://mirror.centos.org/centos|baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos|g \-i.bak \/etc/yum.repos.d/CentOS-*.repo详见 https://mirrors.tuna.tsinghua.edu.…

函数与方法有区别?

有区别&#xff0c;当然是有区别。 不管是java、rust还是go&#xff0c;他们都是不一样的。 先看定义&#xff1a; 函数&#xff08;Function&#xff09; 是一段独立的代码块&#xff0c;用于执行特定的任务。函数可以被多次调用&#xff0c;并且可以接受参数和返回结果。在G…

尼科彻斯定理

目录 1.题目概述 2.题解 思路分析 具体实现 1.题目概述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 例如&#xff1a; 1^31 2^335 3^37911 4^313151719 输入一个正整数m&#xff08;m≤100&#xff09;&#xff0c;将…

pytorch 训练过程内存泄露/显存泄露debug记录:dataloader和dataset导致的泄露

背景 微调 mask-rcnn 代码&#xff0c;用的是 torchvision.models.detection.maskrcnn_resnet50_fpn 代码&#xff0c;根据该代码的注释&#xff0c;输入应该是&#xff1a; images, targetsNone (List[Tensor], Optional[List[Dict[str, Tensor]]]) -> Tuple[Dict[str, Te…

【大数据】-- 部署 Flink kubernetes operator

目录 1.说明 1.1 版本 1.2 kubernetes 环境 1.3 参考 2.安装步骤 2.1 安装本地 kubernetes 环境

Oracle 使用 CONNECT_BY_ROOT 解锁层次结构洞察:在 SQL 中导航数据关系

CONNECT_BY_ROOT 是一个在 Oracle 数据库中使用的特殊函数&#xff0c;它通常用于在层次查询中获取根节点的值。在使用 CONNECT BY 子句进行层次查询时&#xff0c;通过 CONNECT_BY_ROOT 函数&#xff0c;你可以在每一行中获取根节点的值&#xff0c;而不仅仅是当前行的值。 假…

Vue3 实现产品图片放大器

Vue3 实现类似淘宝、京东产品详情图片放大器功能 环境&#xff1a;vue3tsvite 1.创建picShow.vue组件 <script lang"ts" setup> import {ref, computed} from vue import {useMouseInElement} from vueuse/core/*获取父组件的传值*/ defineProps<{images:…

从支付或退款之回调处理的设计,看一看抽象类的使用场景

一、背景 抽象类&#xff0c;包含抽象方法和实例方法&#xff0c;抽象方法待继承类去实例化&#xff0c;正是利用该特性&#xff0c;以满足不同支付渠道的差异化需求。 我们在做多渠道支付的时候&#xff0c;接收支付或退款的回调报文&#xff0c;然后去处理。这就意味着&…

【python 深度学习】解决遇到的问题

目录 一、RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb 二、AttributeError: module ‘tensorflow’ has no attribute ‘flags’ 三、conda 更新 Please update conda by running 四、to search for alternate channels that…

Tomcat部署SpringBoot项目

1.修改打包方式 pom.xml 里 加上 <packaging>war</packaging>2.移除内嵌的Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope…

Java-jar和war包的区别

jar包和war包的区别&#xff1a; 1、war是一个web模块&#xff0c;其中需要包括WEB-INF&#xff0c;是可以直接运行的WEB模块&#xff1b;jar一般只是包括一些class文件&#xff0c;在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后&#xff0c;通…

Kubernetes 调度 约束

调度约束 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和 Container。 APIServer…

腾讯云轻量应用服务器和云服务器有什么区别?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

饿了么输入框限制只能输入数字,并且保留小数

可以使用饿了么ui中的input-number组件实现输入框只能输入数字&#xff0c;这样就不能输入数字以外的&#xff0c;controls隐藏输入框左右俩边的加减按钮&#xff0c;precision小数点保留多少位&#xff0c;2则是俩位&#xff0c;但是会导致默认值为0.00的情况&#xff0c;俩种…