BroadcastReceiver广播接收器

1、Brodcast广播

是一种广泛运用在应用程序之间的传输信息的机制

2、BroadcastReceiver广播接收者

是对发送出来的广播进行过滤接收并响应的一系列组件,它就是接收来自系统和应用中的广播的

3、用途

–当开机完成后系统会产生一条广播

–当网络状态改变时系统会产生一条广播

–当电池电量改变时,系统会产生一条广播

–等等

使用方法

发送:

–把信息装入一个Intent对象(如Action、Category)

–通过调用响应的方法将Intent对象以广播方式发送出去

-sendBroadcast()

-sendOrderBroadcast()

-sendStickyBroadcast()
接收:

当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否 与发送的Intent匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。

注意!!!

-BroadcastReceiver生命周期只有几秒左右

-在BroadcastReceiver里不能做一些比较耗时的操作

-应该通过发送Intent给Service,有Service来完成

-不能使用子线程

普通广播特点:

-同级别接收是无序的

-级别低的后收到广播

-接收器不能截断广播的继续传播也不能处理广播

-同级别动态注册高于静态注册

无序广播特点:

-同级别接收顺序是无序的

-能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否把该广播截断

-接收器能截断广播的继续传播,也能处理广播

-同级别动态注册高于静态注册。

    public class BroadcastActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast);

        findViewById(R.id.send1).setOnClickListener(this);
        findViewById(R.id.send2).setOnClickListener(this);
        //动态注册广播
        IntentFilter intentFilter = new IntentFilter("com.peanut.action.BROADCAST");
        Receiver1 receiver1 = new Receiver1();
        registerReceiver(receiver1,intentFilter);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.send1://发送一条普通广播
                Intent intent = new Intent();
                intent.setAction("com.peanut.action.BROADCAST");
                intent.putExtra("msg","这是一条普通广播");
                sendBroadcast(intent);

            case R.id.send2://发送一条有序广播
                Intent intent2 = new Intent();
                intent2.setAction("com.peanut.action.BROADCAST");
                intent2.putExtra("msg","这是一条有序广播");
                sendOrderedBroadcast(intent2,null);
        }
    }
}

第一个接收器:
    public class Receiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        String s = intent.getStringExtra("msg");
        Log.i("Receiver收到的有序广播:",s);
        //abortBroadcast();截断广播,普通广播在接收器处无法截断

        Bundle bundle = new Bundle();
        bundle.putString("text","处理广播内容");
        setResultExtras(bundle);
        //abortBroadcast();截断广播继续传播
    }
}

第二个接收器:
    public class Receiver1 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        String s = intent.getStringExtra("msg");
        Log.i("Receiver1收到的有序广播:",s);

        Bundle bundle = getResultExtras(true);
        String s1 = bundle.getString("text");
        if (s1!=null){
            Log.i("msg",s1);
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/send1"
        android:text="发送一条普通广播"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/send2"
        android:text="发送一条有序广播"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


在AndroidManifest.xml里面注册
<receiver android:name=".broadcast.Receiver">
        <intent-filter>
            <action android:name="com.peanut.action.BROADCAST"></action>
        </intent-filter>
    </receiver>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值