在Android10之前,应用程序通过调用PackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)函数来实现图标隐藏。
但是在android10之后,所有具有四大组件和需要申请权限的应用,调用这个函数结果,经过测试如下:
- 若activity的icon和roundIcon这两者都不是黑色,则显示实际的像素值。
- 如果activity的icon和roundIcon同时设置为黑色,那么调用后,icon不显示,roundIcon显示默认的图标。
网上一种方式是,通过设置activity的label为空字符串“”,icon和roundIcon设置为像素值为0的黑色图标。该方案如下所示:
Android10.0应用图标隐藏方案(7.0-10.0)
上文中,可隐藏的icon和roundIcon的图标文件:
上文中,theme字段透明值的设置:
通过实际测试,这种方法的隐藏效果是有缺陷的,表现就是,桌面上的图标不显示后,留下了一个图标背景的阴影,虽然点击并没有效果,但是视觉上的缺陷是不能容忍的。
通过实际测试,我发现有一种隐藏图标的方式,其实现步骤如下:
- 设置主activity的intent-filter字段,其格式必须满足如下两点,一是在启动节点的activity中,除却"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"外,还要添加别的条目,目的就是使应用程序不显示图标。
- Android scheme浏览器启动方式,从服务端网页启动应用程序。要注意的是,浏览器scheme启动方式不是说的从客户端,而是服务器端启动。客户端浏览器访问服务器的网页,然后点击该网页中的链接地址(必须满足scheme://host:port/prefix/这种格式),唤醒客户端本地的应用程序。