Android系统开发之修改Captive Potal Service(消灭感叹号)

2023-10-26

本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。
谷歌在Android5.0之后的版本加入了CaptivePotalLogin服务。本服务的功能是检查网络连接互联网情况,主要针对于Wi-Fi,不让Android设备自动连接那些不能联网的无线热点,白白耗电。
该服务的原理就是让接入无线热点后,测一下网站connectivitycheck.gstatic.com的联通情况。
但对于不能访问谷歌服务器的地区,问题就来了:

  1. 如果谷歌(谷歌服务)认为WiFi网络无法联网,就不会自动连接到该WiFi热点。而且如果设备有移动网络可用,就会自动切换到2G/3G/LTE。并且让WiFi网络的标志上面显示感叹号标志。

  2. 出现感叹号的同时,该服务会一直试探服务器,直到联通为止。该过程会消耗流量和电量,甚至导致部分设备无法休眠。

  3. 这个感叹号会使广大强迫症晚期患者无法接受。

对于Android Source开发的同学,最好的解决办法自然是修改源码:
方案1:更换测试地址
frameworks/base/packages/SettingsProvider/res/values/defaults.xml:

@@ -223,7 +223,7 @@
 <!-- Default for Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
          1 == enabled, all other values will disable it -->
     <integer name="def_captive_portal_detection_enable">0</integer>
+    <string name="def_captive_portal_server">www.androidbak.net</string>

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:

@@ -2623,9 +2623,12 @@ class DatabaseHelper extends SQLiteOpenHelper {
             loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED,
                     R.bool.assisted_gps_enabled);
 
           loadIntegerSetting(stmt, Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,
                     R.integer.def_captive_portal_detection_enable);
 
+            loadStringSetting(stmt, Settings.Global.CAPTIVE_PORTAL_SERVER,
+                    R.string.def_captive_portal_server);
+

方案2:禁用服务
本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。

--- a/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -270,8 +270,11 @@ public class NetworkMonitor extends StateMachine {
 
         mLingerDelayMs = SystemProperties.getInt(LINGER_DELAY_PROPERTY, DEFAULT_LINGER_DELAY_MS);
 
-        mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1;
+        //mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(),
+               //Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1;
+        mIsCaptivePortalCheckEnabled = false;

对于普通用户,有一个简便的方法:
第一步:安装adb,不多赘述。
第二步:在终端输入adb shell settings put global captive_portal_server www.g.cn
或者输入adb shell settings put global captive_portal_detection_enabled 0
重启有效,恢复出厂设置要重来。
本文原作者 长鸣鸟 ,未经同意,转载不带名的严重鄙视。
That’s all.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android系统开发之修改Captive Potal Service(消灭感叹号) 的相关文章

随机推荐

  • IPsec的主模式(Main mode)和积极模式(Aggressive mode)

    主模式和积极模式的信息交换机制不同 主模式有6条消息要交换 2个一组对称 主模式中 第1 2条信息中 双方交换了一些协商信息 如认证算法 hash 加密算法 DH组 认证机制等 第3 4条信息中 双方交换了公钥 在交换了公钥之后 就可以根据
  • 程序员面试什么最重要?

    来自 http www cnblogs com weidagang2046 archive 2013 02 15 on interview html 程序员面试一直是社区乐于讨论的热门话题 我自己从06年实习以来 先后经历了4家软件公司 全
  • 软件工程导论第六版 第五章 总体设计知识点总结

    目录 总体设计概述 目的 任务 设计过程 设计原理 什么是模块 什么是模块化 模块化的优点 模块化和软件成本 逐步求精 什么是逐步求精 Miller法则 抽象 信息隐藏和局部化 什么是信息隐藏 信息隐藏的优点 模块独立 耦合 内聚 内聚程度
  • XML基础入门:关于XML建模

    今天我给大家分享关于XML建模的基础 目录 今天我给大家分享关于XML建模的基础 一 什么是XML建模 就是将XML配置文件以模型的方式 进行输出操作 二 如何将XML建模 步骤 实例对象模型 1 ForwardModel 2 Action
  • 微信小程序支付

    微信小程序支付接口需要的参数timeStamp nonceStr package signType paySign openid是在登录时获取的 只需要调取token里的内容就可以了 点击事件通过cardid来判断与传值
  • 在blender中使用python脚本批量复制平移生成模型

    本案例需求 从基本的建筑单元按照字形平面布局生成综合建筑体 先在blender中用手工制作好一个建筑单元 名称定为 cube 然后在blender中打开一个 Text Editor 编辑窗口 在里面写入python脚本 import bpy
  • ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

    报错内容 ImportError usr lib x86 64 linux gnu libstdc so 6 version GLIBCXX 3 4 29 not found required by home lab118 anaconda
  • 图解SSL/TLS协议

    http www ruanyifeng com blog 2014 09 illustration ssl html 一 SSL协议的握手过程 开始加密通信之前 客户端和服务器首先必须建立连接和交换参数 这个过程叫做握手 handshake
  • 联想小新潮7000安装deepin 系统

    deepin 是国内比较好的开源linux操作系统 安装也比较方便 1 下载ISO镜像文件和深度启动盘制作工具 deepin官网下载ISO 启动盘制作工具下载 2 按照官网的指导 一步一步安装系统 官网指导安装过程 win10进入bios的
  • STL-set-用法

    set集合容器实现了红黑树 Red Black Tree 的平衡二叉检索树的的数据结构 在插入元素时 它会自动调整二叉树的排列 把该元素放到适当的位置 以确保每个子树根节点的键值大于左子树所有节点的键值 而小于右子树所有节点的键值 另外 还
  • 益智小游戏点灯(迷你世界lua脚本)

    点灯游戏是一个十分有趣的智力游戏 有一行N行N列的灯 开始时全部是灭的 当你点击其中一盏灯时他的上下左右 若存在的话 状态全部改变 现在要求你在限定的时间内以最少地步数 将全部的灯点亮 点灯益智游戏 作者 韩永旗 迷你号 247312290
  • Java基础读取本地txt文件

    public class TxtTest public static String txt2String File file StringBuilder result new StringBuilder try BufferedReader
  • python中冒号(:)的作用

    python中冒号 的作用 一开始接触python代码的时候冒号这个存在一直困扰了我很久 说一下我对冒号的理解 冒号 表示的就是一个整体 冒号出现在哪里就代表这个位置对整体 第一 作为整体用于输出 如在plt scatter x 0 x 1
  • 【Leetcode】142. 环形链表 II

    题目描述 142 环形链表 II 给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 为了表示给定链表中的环 我们使用整数 pos 来表示链表尾连接到链表中的位置 索引从 0 开始 如果 pos 是 1 则在该链表中
  • 海明校验码

    1 海明码的特点 其中m表示数据位的位数 k表示海明校验码的位数 k位海明校验码一共可以表示种校验信息结果 其中有一种要用来表示没有出错的情况 则其余还剩 1种结果 为了使校验结果可以指出任一位出错的位置 则需要满足以上不等式 2 举例说明
  • 树莓派搭建K8S集群

    最近学习k8s知识 想用树莓派搭建集群 在网找了不少 就发现一篇文章可以搭建成功香橙派4和树莓派4B构建K8S集群实践之一 K8S安装 参考了不少 这里主要记录下遇到的一些问题 参考的文章 是香橙派和树莓派 我这里全是树莓派 所以是树莓派路
  • js判断Android、iOS或浏览器

    第一种 通过判断浏览器的userAgent 用正则来判断是否是ios和Android客户端 代码如下
  • Python 八大排序算法合集

    1 选择排序 选择排序 升序 不稳定排序 原理 给定一个列表 经过第一轮比较后 找到最小值 与第一个位置交换 接着对不包括第一个元素的剩下的元素 找到最小值 与第二个位置交换 重复该过程 直到进行比较的记录只有一个为止 以 list 5 4
  • 关于STM32F0407译出错问题

    嵌入式编译出错问题 关于STM32F0407译出错问题 OBJ BEEP axf Error L6218E Undefined symbol TIM ClearITPendingBit referred from main o OBJ BE
  • Android系统开发之修改Captive Potal Service(消灭感叹号)

    本文原作者 长鸣鸟 未经同意 转载不带名的严重鄙视 谷歌在Android5 0之后的版本加入了CaptivePotalLogin服务 本服务的功能是检查网络连接互联网情况 主要针对于Wi Fi 不让Android设备自动连接那些不能联网的无