毕设小结(三)Android自身组件禁用

在Android程序中,BroadcastReceiver作为对系统敏感程度的一种感知。我们所谓的开机自启,联网后台自启,短信电话过滤等,就是通过BroadcastReceiver来对相应事件进行感知。但是我们可能会有这样的需求:BroadcastReceiver希望只是做一些初始的事情,调用一次之后不希望其再次被敏感事件唤醒。于是,我们就要对自身程序的组件进行启用以及禁用。这样的需求分两步走:

第一步,我们需要根据intent-filter筛选出我们需要禁止或启用的组件。

第二步,我们需要根据对该组件进行禁止或者启用。

直接上代码,应用程序自身不需要特别权限即可完成。对于进制或启用其他程序的组件在4.0以前需要root权限,4.0之后据说可以不用,具体没有深究,有兴趣的可以通过逆向360查看。(目前我也只能对静态注册的广播接收器进行此功能)

public class StaticBroadcastPolicy extends BroadcastReceiver{
	
    private static final String TAG = "StaticBroadcastPolicy";
	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d(TAG,"-->onReceve");
		//获取广播Intent过滤规则
		String filterBroadcast = intent.getStringExtra("FilterBroadcast");
		boolean enableFlag = intent.getBooleanExtra("Enable",false);
		PackageManager pm = context.getPackageManager();
		Intent it = new Intent(filterBroadcast);	
		//查询对应Intent的广播接收器
		List<ResolveInfo> resolveInfoList = pm.queryBroadcastReceivers(it, PackageManager.GET_DISABLED_COMPONENTS);
		for(int j = 0 ; j < resolveInfoList.size() ; j++){
			ResolveInfo resolveInfo = resolveInfoList.get(j);
			if(resolveInfo.activityInfo.packageName.equals(context.getPackageName())){
				ComponentName mComponentName = new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);		
				if(enableFlag == true){
					pm.setComponentEnabledSetting(mComponentName,
							PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
				}else{
					pm.setComponentEnabledSetting(mComponentName,
							PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);
				}
				Log.d(TAG, "COMPONENT_ENABLED_STATE:" + pm.getComponentEnabledSetting(mComponentName) +
						",componentName:" + resolveInfo.activityInfo.name+",packageName:"+resolveInfo.activityInfo.packageName);
				break;
			}		
		}		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值