好吧,变态的老板又不知道从哪里看到了这么一个需求:要把自己的应用隐藏起来,不让别人发现,然后,额,偷偷的干啥。
在使用Android手机的过程中,会出现一种情况,你的通知栏被占满了,你却不知道是哪个应用做的手脚;你的手机会莫名其妙的发送短信,当然你也不知道这个是哪个应用做的;再或者你的手机莫名其妙今天的流量用超了,额,你找了半天也不知道这应用在哪里。
于是乎,有些聪明的用户,开始打开设置---->应用程序---->正在运行。赫然看见一个没见过的应用在跑着,当然,这个时候那家伙对你还是客气的,若是直接换成了Google的小机器人,恐怕你要找好久才知道这做坏事的家伙究竟是谁。
好吧,老板说这玩意赚钱,没办法,都是被逼的呀。怎么实现呢?先来一段java代码呗:
// 将app图标隐藏:
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
什么?这个不是你想要的,额,你想要在程序安装的时候直接没有啊?因为用户不一定会点击你呢,额,这个,好吧,也是可以实现的。不过,这里需要在xml文件中实现了,怎么弄呢,请看代码:
上面这段代码,主要是说的MainActivity中,如果你设置了launcher,那么就会显示一个图标,额,把它干掉行不行?
经过测试,发现是可以的。。。不知道这算不算是Android的漏洞,如果程序没有如下语句,程序依然可以运行
如果你想你的程序不要显示在Android的桌面上,那么你只需要去掉这行代码,OK,你安装应用的时候,是不会有图标显示的。
好吧,不断变化的需求,变态的老板,得到这样的结果了,并不满意,他还想动态的显示,用户点击了,显示一下,做黑手的时候,不显示。
额,老板你逗我么????算了,一次性写完代码,不过动态显示代码,只能够在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)
}
哎呀,后来发现Android提供了一个最近程序显示的机制,如果是最近启动过的程序,那么会在最近程序中找到,额,怎么办呢?
实际上,如果我们退出了应用,程序只在后台运行,这里也是找不到的,可是,可是,老板要,就算程序运行过了,也不能找到痕迹。。。。U can U up 啊。妹的,唉,苦逼程序员,就是苦逼命啊,还是要找到解决方案才对。
通过分析,我们的程序运行之后会有记录,那么,是不是在程序退出的时候,删除记录就行了呢?嗯,思路可行。那么记录放在哪里呢?我们从什么地方去删除呢?好吧,不多说了,经过测试,以下代码可行:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.exit(0);
}
OK,搞定,收工。