BrocadcastReceiver广播 常规使用

BroadcastReceiver
也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
广播能够实现,App与系统,ActivityA与ActivityB或者与服务之间进行交互、传递参数等动作。
两种注册方式:
广播有两种注册方式,动态注册和静态注册:静态注册为常驻型,动态不是常驻性。
静态注册:
首先创建一个类,该类继承与 BroadcastReceiver:
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //接收到广播时触发
        //不要超过10s
        Toast.makeText(context,"boot ok",Toast.LENGTH_LONG).show();
        Log.e("m_tag","====boot complete====");
    }
}
然后在AndroidManifest.XML中注册:
    <receiver
        android:name=".BootReceiver"
        android:exported="true">
        <intent-filter>
             <action android:name="android.intent.action.BOOT_COMPLETED" />
             <action android:name="android.intent.action.MEDIA_MOUNTED"/>
             <action android:name="android.intent.action.MEDIA_EJECT"/>
             <action android:name="abc123"/>
         </intent-filter>
    </receiver>
之后,我们就可以在MainActivity中对该广播发送广播通知,可根据 <intent-filter>拦截器里面的actvity属性指定发送到那个广播,也可以匿名发送,广播在接收到广播通知后,就会触发onReceive回调,我们可以通过Intent携带不同参数,然后根据参数的键值来判断,执行相应的操作。
动态注册
在Activity或Service中注册,能够动态控制其生命周期,相对静态常驻来说,减少内存和电量消耗等。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    //本地广播管理器
    private LocalBroadcastManager lm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn1).setOnClickListener(this);
        //初始化广播管理器
        lm = LocalBroadcastManager.getInstance(this);
    }
    private MyReceiver receiver;

    @Override
    protected void onResume() {
        super.onResume();
        //声明一个广播,填写相关属性
        receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_TIME_TICK);
        filter.addAction("hello");
//        //注册广播
//        registerReceiver(receiver,filter); //系统ActivityManager级别的:即系统其他App的拦截器也能拦截

        //注册本地广播
        lm.registerReceiver(receiver,filter);//LocalBroadcastManager App级别的:即只能本App里面能拦截
    }

    @Override
    protected void onPause() {
        super.onPause();
        //取消注册
//        unregisterReceiver(receiver);
        lm.unregisterReceiver(receiver);
        receiver = null;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                Intent it = new Intent("hello");
//                sendBroadcast(it);      //发送系统级别的广播
                lm.sendBroadcast(it);     //发送本地广播
                break;
        }
    }
}


/**
 * Created by Administrator on 2017/5/22.
 */广播

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("m_tag",""+intent.getAction());
    }
}
其中:
registerReceiver(receiver,filter); 该注册方式为系统ActivityManager级别的:即系统其他App的拦截器也能拦截
lm.registerReceiver(receiver,filter); 本地(即本App能)级别:即只能拦截本App其他Activity或者Service发送的广播

动态广播两种注册方式图解

动态注册一般在onResume 中声明属性注册,然后onPause()的时候注销。(这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了)。

同时,我们可以通过设置广播的优先级属性,优先接收广播,可以进行拦截,也可以向优先级低的继续传递

    <intent-filter android:priority="998"> //注册时表明优先级属性

    abortBroadcast();//广播接收后,可以进行终止向下传递  

更多使用说明可参考微博:
http://blog.csdn.net/liuhe688/article/details/6955668
http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值