Android如何隐藏桌面图标

1、背景介绍

        好吧,变态的老板又不知道从哪里看到了这么一个需求:要把自己的应用隐藏起来,不让别人发现,然后,额,偷偷的干啥。

        在使用Android手机的过程中,会出现一种情况,你的通知栏被占满了,你却不知道是哪个应用做的手脚;你的手机会莫名其妙的发送短信,当然你也不知道这个是哪个应用做的;再或者你的手机莫名其妙今天的流量用超了,额,你找了半天也不知道这应用在哪里。

        于是乎,有些聪明的用户,开始打开设置---->应用程序---->正在运行。赫然看见一个没见过的应用在跑着,当然,这个时候那家伙对你还是客气的,若是直接换成了Google的小机器人,恐怕你要找好久才知道这做坏事的家伙究竟是谁。


2、代码实现

        好吧,老板说这玩意赚钱,没办法,都是被逼的呀。怎么实现呢?先来一段java代码呗:

// 将app图标隐藏:
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);

       嗯,没错,你用上面一段代码,在你的机器运行一下,你的图标就不见了。

       什么?这个不是你想要的,额,你想要在程序安装的时候直接没有啊?因为用户不一定会点击你呢,额,这个,好吧,也是可以实现的。不过,这里需要在xml文件中实现了,怎么弄呢,请看代码:

        
            
                

                
            
        
       上面这段代码,主要是说的MainActivity中,如果你设置了launcher,那么就会显示一个图标,额,把它干掉行不行?

       经过测试,发现是可以的。。。不知道这算不算是Android的漏洞,如果程序没有如下语句,程序依然可以运行

       如果你想你的程序不要显示在Android的桌面上,那么你只需要去掉这行代码,OK,你安装应用的时候,是不会有图标显示的。


3、动态显示

       好吧,不断变化的需求,变态的老板,得到这样的结果了,并不满意,他还想动态的显示,用户点击了,显示一下,做黑手的时候,不显示。

       额,老板你逗我么????算了,一次性写完代码,不过动态显示代码,只能够在Java代码中使用逻辑控制了。不废话,代码如下:

// 将app图标隐藏:
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);

// 将app图标显示:
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);

/**
控制图标显示和隐藏
@param clazz
@param enabled true:显示、 false:隐藏
*/
private void setComponentEnabled(Class clazz, boolean enabled) {

	final ComponentName c = new ComponentName(this, clazz.getName());

	getPackageManager().setComponentEnabledSetting(c,enabled?	

PackageManager.COMPONENT_ENABLED_STATE_ENABLED:PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP)
}

4、擦下屁股

       哎呀,后来发现Android提供了一个最近程序显示的机制,如果是最近启动过的程序,那么会在最近程序中找到,额,怎么办呢?

       实际上,如果我们退出了应用,程序只在后台运行,这里也是找不到的,可是,可是,老板要,就算程序运行过了,也不能找到痕迹。。。。U can U up 啊。妹的,唉,苦逼程序员,就是苦逼命啊,还是要找到解决方案才对。

       通过分析,我们的程序运行之后会有记录,那么,是不是在程序退出的时候,删除记录就行了呢?嗯,思路可行。那么记录放在哪里呢?我们从什么地方去删除呢?好吧,不多说了,经过测试,以下代码可行:

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		System.exit(0);
	}

       这么简单?对,就是这么简单,实际上只是调用了System.exit(0);这段代码而已,这里是杀死这个线程。

       OK,搞定,收工。


你可能感兴趣的:(Android常见问题解析)