Android实例-手机安全卫士(三十八)-代码中注册BroadcastReceiver
一、目标
1、在代码中注册BroadcastReceiver,使其随着server运行而运行(即Receiver的生命周期与service的生命周期一致,当service创建而创建并注册Receiver,销毁的注销);
2、随着服务的销毁而注销Receiver;
二、代码实现
1、将第三十七节中创建的用于接收去电的广播接收者类(OutCallReceiver)作为一个内部类放在需要注册的代码中。本例中为“显示来电号码归属地”服务类(ShowComingPhoneAdd);
内部类代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class OutCallReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 //获取去电号码 6 String outCallNumb = getResultData(); 7 //查询数据库 8 String outCallAdd = NumberAddQueryUtils.queryNumber(outCallNumb); 9 Toast.makeText(context, outCallAdd, 1).show(); 10 } 11 }
2、在广播接收者类所在的类,即“显示来电号码归属地”服务类(ShowComingPhoneAdd)中用代码注册。
(1)定义一个BroadcastReceiver对象的成员变量(取名outCallReceiver);
(2)在onCreate()方法中:
①通过new一个1中自定义的内部类对象,使(1)的成员变量实例化;
②通过new方式定义并实例化一个IntentFilter(意图匹配器)对象(取名intentFilter);
③通过IntentFilter对象的addAction(String action)方法增加需过滤的动作,参数action为来电动作(即android.intent.action.NEW_OUTGOING_CALL);
④通过registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法注册Receiver ,参数receiver为需要注册的receiver名称(本例为自定义内部类对象outCallReceiver),参数filter为意图过滤器(本例为intentFilter)
onCreate()方法中注册Receiver代码为:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //代码注册广播接收者 2 outCallReceiver = new OutCallReceiver(); 3 IntentFilter intentFilter = new IntentFilter(); 4 intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL"); 5 registerReceiver(outCallReceiver, intentFilter);
3、随着服务(ShowComingPhoneAdd)结束而用代码注销广播接收者
(1)在服务的onDestroy()方法(即服务销毁时)中,通过unregisterReceiver(BroadcastReceiver receiver)方法注销Receiver,参数receiver为需要注销的Receiver名称(outCallReceiver)
(2)将注销后的Receiver对象(outCallReceiver)设为null,以释放资源;
onDestroy()注销Receiver代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //注销广播接收者 2 unregisterReceiver(outCallReceiver); 3 outCallReceiver = null;
4、修订。由于“显示来电号码归属地”服务类(ShowComingPhoneAdd)也可以显示去电号码的归属地信息,因此可将该服务名称改为“显示号码归属地”服务类(ShowPhoneAdd),以便于理解。