Chinaunix首页 | 论坛 | 博客
  • 博客访问: 498368
  • 博文数量: 224
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2433
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-05 22:02
个人简介

目前在一家公司担任软件总监,主要涉及智能手机,笔记本电脑的开发

文章分类

全部博文(224)

文章存档

2024年(5)

2023年(68)

2022年(13)

2021年(7)

2020年(11)

2019年(3)

2018年(10)

2017年(8)

2012年(7)

2011年(4)

2010年(32)

2009年(41)

2008年(6)

2007年(9)

分类: LINUX

2012-04-09 15:13:29

最近在做项目的时候,发现有一个应用,防火墙,总是在后台,但实际上我并未开启防火墙。
研究了下,发现其Mainifest中有一个响应BOOT_COMPLETED的Receiver .  也就是它必须在收到
BOOT_COMPLETED后,激活自己,然后去检查是否启动了防火墙。如果没启动,怎么去除它呢,让它成为
空进程?
broadcasr receiver 的生命周期:
  由于Broadcast receiver 只有一个方法, 那就是void onReceive(Context curContext , Intent broadcastMsg)
在执行OnReceiver的时候是活跃的,执行完了就不活跃了,变为后台进程 。
对于Receiver ,有两种实现方式:
1 在Mainifest 声明
2 在Java code中register /unregister
第一种静态注册方式比较普遍
静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action
我们可以用PackageManager来enable/disable Manifest中声明的BroadcastReceiver。disabled后,Receiver不会再被激发。

假如在AndroidManifest.xml中如下声明一个receiver,也就是程序监听系统启动的消息,系统启动后,程序运行
< receiver android:name=".MyReceiver">
  < intent-filter>
  < action android:name="android.intent.action.BOOT_COMPLETED"/>
  < /intent-filter>

在OnReceiver函数中:
ComponentName component = new ComponentName(context, MyReceiver.class); //Check if the Component is enabled or disabled
final PackageManager pm = context.getPackageManager();
if(是否enabled),如果没有enable ,则
pm.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
  PackageManager.DONT_KILL_APP);  //去除receiver
阅读(3577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~