如何在 android 叠加层中设置默认设置(强制门户模式)

How to set default settings in android overlay (captive portal mode)

我正在做一个 aosp 项目。对于这个项目,我想在 aosp 构建中默认关闭强制门户检查。我认为并测试了我可以通过以下方式设置设置:

settings put global captive_portal_detection_enabled 0 

另见 https://www.kuketz-blog.de/android-captive-portal-check-aenderung/

所以通常我会通过使用设备中资源的覆盖机制来设置它,例如在overlay/frameworks/base/core/packages/settingsprovider/res/value:

<resources>
    <!-- disable lockscreen by default to avoid showing of user switcher -->
    <bool name="def_lockscreen_disabled">true</bool>
</resources>

我想,强制门户的默认值在 aosp ConnectivityService 中定义为

        private int getCaptivePortalMode() {
            return Settings.Global.getInt(mContext.getContentResolver(),
                    Settings.Global.CAPTIVE_PORTAL_MODE,
                    Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
        }

我尝试了几种方法来覆盖它,但是在前面加上 config_ 或 _def 不起作用,通过

添加条目
<resources>
<!-- disable captive portal checking -->
    <add-resource type="integer" name="config_captive_portal_mode"/>
    <integer name="config_captive_portal_mode">0</integer>
</resources>

现在我只剩下两个选项了,但我都不喜欢其中任何一个: a) 补丁 aosp -> 更新有问题 b) 运行 第一次启动时的脚本 -> 丑陋

我是不是漏掉了什么?

Alains 的回答正是我要找的。

You'd need to add some logic to check whether the device is booting for the first time or not, through a file in userdata for example.

要为 CAPTIVE_PORTAL_MODE 添加默认值,请在

中进行以下更改

framework/base/packages/SettingsProvider/src

下的数据库助手
loadIntegerSetting(stmt, Settings.Global.CAPTIVE_PORTAL_MODE,
                    R.integer.def_captive_portal_detection_enabled);

Default.xml 在 framework/base/packages/SettingsProvider/res

<integer name="def_captive_portal_detection_enabled" translatable="false">0</integer>