Android应用之【隐藏桌面图标的一种方法】

在Android10之前,通过PackageManager.setComponentEnabledSetting方法可以隐藏应用图标。但在Android10及以后,由于对四大组件和动态权限的限制,此方法失效。一种网上流传的解决方案是设置activity标签为空,icon和roundIcon为黑色,但会导致图标位置留有黑影。另一种方法是修改主activity的intent-filter,添加额外的行为和动作,破坏默认启动属性,使程序无法通过常规方式启动。此外,Androidscheme启动方式需要通过服务器端的web页面触发,而非客户端浏览器直接访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android10之前的版本,应用程序调用方法PackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)可以隐藏在桌面上的图标,这样的程序如果被偷偷安装后,机主本人可能并不知道自己的手机被安装了某些程序。

但是android10之后的版本,如果应用中使用了四大组件(activity ,service ,broadcast, contentprovider)或者需要动态申请权限,这个函数调用将失去效果,简单测试后,调用该方法后,程序的桌面图标效果如下:

  1. 若AndroidManifest.xml中activity的icon和roundIcon这两者都不是黑色,显示资源文件中定义的图标像素。
  2. 如果activity中的icon和roundIcon同时设置为黑色,则icon不显示,roundIcon显示为系统默认的空白图标。

因此,传统的方法调用将不再适用了。

网上流传一种方式是,设置activity的label为空字符串“”,icon和roundIcon的像素值为0的黑色图标。该方案链接为:
Android10.0应用图标隐藏方案(7.0-10.0)

上述方法中,icon和roundIcon的图标资源文件如下:
在这里插入图片描述

上文中,theme字段透明的设置:
在这里插入图片描述

实际测试后,这种方法的隐藏效果有重大缺陷,在调用本文开头的PackageManager.setComponentEnabledSetting方法后,桌面上的图标虽然被抹去了,但是留下了一个图标大小的黑影,并不像作者在文中所说的那样"完全看不到", 作者源码我在android12上亲自测试过,这时候,点击图标虽然完全没有效果,但是视觉上的缺陷是无法容忍的。

通过测试,我发现有一种隐藏图标的方式,其实现步骤如下:

  1. 设置主activity的intent-filter字段,其格式必须满足如下两点,一是在启动节点的activity中,包含默认的启动属性"android.intent.action.MAIN"和"android.intent.category.LAUNCHER",二是还要添加别的属性,比如android.intent.action.VIEW,这样作的目的就是破坏应用程序启动节点的默认设置,使之含有别的行为和动作,这样程序启动后就不能正常显示图标。

比如启动节点的如下设置:
在这里插入图片描述

  1. 使用Android scheme方式从浏览器启动(或者另外再安装一个程序,当作此程序的启动器)。要注意的是,浏览器scheme启动方式不是说客户端的浏览器访问路径触发启动应用程序,我原先以为,在客户端的浏览器中输入形如myscheme://myhost这样的url就可以触发程序的执行,但是反复测试没有效果,于是想到,会不会这种scheme方式,说的是访问服务器的web页面,该地址的页面中有个形如 “<a href=“myscheme://myhost”>点击此处启动Android程序</a>” 这样的标签,用户在浏览器中点击这个标签后,即可触发应用中Android的启动组件。

这个简单的逻辑,无形中浪费了很多时间。

源码如下,上述描述的内容,只需要关注测试项目中AndroidManifest.xml中的Application节区属性。

源码链接地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值