四大组件-广播接受者的特别之处

四大组件的区别

  • Activity
  • Service
  • Content provider
  • BroadcastReceiver

广播接受者很特别:不仅可以在功能功能清单文件当中注册,还能在代码中注册。

在清单文件当中注册
 <receiver android:name="com.scau.mobilesafe.receiver.OutCallReceiver" >
        <intent-filter >
            <action  android:name="android.intent.action.NEW_OUTGOING_CALL"/>
        </intent-filter>
    </receiver>
在代码中注册
private OutCallReceiver receiver;

//注册监听去电
    receiver= new OutCallReceiver();
    IntentFilter filter =new IntentFilter();
    filter.addAction("android.intent.action.NEW_OUTGOING_CALL");//监听去电的动作
    registerReceiver(receiver, filter);
  • 对比以上两种注册方法
    • 在清单文件当中注册,不论程序是否开启,这个注册信息同样都会生效,所以在某些场合,当程序关闭后注册的清单文件也要随着失效的情况下,选择用代码注册会比较科学。
    • 用代码注册的一下几大要点:
      • 在将要注册的信息定义成类的成员变量,这很关键。因为后面要将这个文件注销的时候,用到就是这个成员变量。
      • 在具体注册监听过程中,现定义好的信息new(创建出来),然跟在清单文件当中注册是一样的流程。将一路意图过滤器创建出来之后,添加意图过滤器的反应。这个反应就是来电监听,这时候还是要用到系统给定的NEW_OUTGOING_CALL监听接口。
      • 最后在onCreate方法中将这个方法注册一下。
父类和子类的权限问题
private class OutCallReceiver extends BroadcastReceiver {

    private void onReceive(Context context, Intent intent) {
        String number = getResultData();
        String address = NumberAddressQureyDao.getAddress(number);
        Toast.makeText(context, address, 1).show();
    }
}

会报如下错误

    Cannot reduce the visibility of the inherited method from BroadcastReceiver
  • 意思是子类的权限不能覆盖父类的权限。
    • 因为广播接受者(BroadcastReceiver)在源码中给定的权限是public。所以如果此处使用private就相当于:定义的人能说话,但是作为人的子类的学生不能说话,这样是不和逻辑的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值