最近在做项目的时候,发现有一个应用,防火墙,总是在后台,但实际上我并未开启防火墙。
研究了下,发现其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
阅读(3635) | 评论(0) | 转发(0) |