iKirby's Blog/

在 Android 上隐藏不想要的状态栏图标

前段时间一朋友问我能不能隐藏 Android 状态栏上不想要的图标,我就想到了以前 System UI Tuner 修改的设置值 icon_blacklist。我之前看过的最早的帖子应该是这个。在自己的手机上测试了一下,这个设置在 Android 13 上依然有效,不过由于它属于 Secure system settings,在没有 root 的情况下需要用 adb 命令来修改。


修改方法很简单,连接上 USB 调试后进入 adb shell,输入命令修改设置值就可以了。设置值为用逗号分隔开的图标名称。部分第三方 ROM 加上了设置界面,但是里面并没有包含所有可以隐藏的图标,仍然需要手动修改设置值(例如 LineageOS)。设置值修改后可以立即生效,不需要重新启动系统。

settings put secure icon_blacklist <value>

如果只设置自己想要隐藏的图标名称,可能会让系统原先默认隐藏的图标重新显示出来(如果默认有被隐藏的图标的话)。可以先使用 get 获取设置的默认值,然后在后面加上自己想要隐藏的图标名称。这个值在 Pixel 官方 ROM 上默认为空,会使用框架里预先定义的默认值。

settings get secure icon_blacklist

要清除设置值,用 delete 就可以了。注意删除的时候可能会出现 SystemUI 崩溃的问题(我在 LineageOS 上遇到了这个问题,不过只会崩溃一次,等它自己重新启动就没事了)。

settings delete secure icon_blacklist

那么应该如何知道系统状态栏图标对应的名称呢?现在 Google 提供了 Android Code Search 工具,可以很方便的搜索 AOSP 的代码。先搜索 icon_blacklist,可以找到以下代码

String ICON_HIDE_LIST = "icon_blacklist";

/** Reads the default hide list from config value unless hideListStr is provided. */
static ArraySet<String> getIconHideList(Context context, String hideListStr) {
    ArraySet<String> ret = new ArraySet<>();
    String[] hideList = hideListStr == null
            ? context.getResources().getStringArray(R.array.config_statusBarIconsToExclude)
            : hideListStr.split(",");
    for (String slot : hideList) {
        if (!TextUtils.isEmpty(slot)) {
            ret.add(slot);
        }
    }
    return ret;
}

从这段代码看到当没有设置值时,会使用 config_statusBarIconsToExclude 对应的值。搜索 config_statusBarIconsToExclude 可以找到目前在 Android 13 上的默认值(在 icon_blacklist 未设置时)有两个,旋转和耳机图标,和之前版本没有变化。

<string-array name="config_statusBarIconsToExclude" translatable="false">
    <item>@*android:string/status_bar_rotate</item>
    <item>@*android:string/status_bar_headset</item>
</string-array>

这里的字符串是引用的,再搜索 status_bar_rotate 可以找到它对应的rotate。同时这个文件里也有其他状态栏图标的名称,目前 Android 13 的图标一共有这些:

rotate
headset
data_saver
managed_profile
ime
sync_failing
sync_active
cast
hotspot
location
bluetooth
nfc
tty
speakerphone
zen
mute
volume
wifi
cdma_eri
data_connection
phone_evdo_signal
phone_signal
battery
alarm_clock
secure
clock
mobile
vpn
ethernet
microphone
camera
airplane
no_calling
call_strength
sensors_off
screen_record

这个列表对于 Pixel 和基于 AOSP 的一些第三方 ROM 应该都是可用的。对于厂商定制的 ROM,可能还有其他的图标,要看那些图标对应的名字和设置值为空时系统预设的默认值,应该只能通过反编译系统提取的文件来查看了。


已经 2023 年了,先祝大家新年快乐。好长时间没有更新文章了(更新服务器的软件也算更新博客吧),去年也没有写 Android 预览版的体验,因为太懒了。今年如果 Android 14 的变化比较大的话,我应该会写一写吧。下半年应该要换手机了,不然就不能继续用最新版的 Android 了。希望 Google 可以给 Pixel 系列提供更长时间的系统升级,而不是只延长安全更新的期限。现在三星都提供四年系统升级了,Google 更应该延长时间,起到带头作用啊。

留下一条评论

共有 4 条评论

  1. mechtifs:

    新年快乐!!

    2023-01-06 10:51 回复
  2. BaCO3:

    新年快乐!🎉

    2023-01-16 15:59 回复
  3. qianyoo:

    老哥这密码忘了两年了

    2023-02-10 08:59 回复
    1. iKirby:

      哈哈哈,就是懒,要是忘了密码可能整个网站的内容都没了

      2023-02-10 09:00 回复