BroadCastReceiver广播接受者(动态和静态)

文章详细介绍了Android中的广播接收者BroadcastReceiver的作用,特别是在Android7.0后动态注册广播的必要性。动态注册广播具有生命周期依赖,可在Activity创建时注册,销毁时卸载,提供更大的灵活性。静态注册则使广播接收器在应用关闭时仍能接收广播,适合全局监听。文章还展示了动态注册和静态注册的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

为什么学习广播接受者

Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播。

BroadCastReceiver(广播接收器),属于Android四大组件之一,在Android开发中,BroadCastReceiver的应用场景非常多,一般用于组件间通信。

解决问题需要运用知识点:

广播生命周期,有序、无序广播,系统广播,自定义广播。

广播接受者有两种注册方法:动态注册,静态注册

定义:广播是应用于系统、应用、控件、线程间消息响应的组件。

使用广播思路分析:

创建广播接收者BroadCastReceiver类

注册广播接受者(静态或动态,常用动态注册)

调用sendBroadcast()方法发送广播

onReceiver(Context context,Intent intent)方法处理广播

重点:为什么要动态注册广播

1.在Android7.0之前我们只需要静态注册一下广播就可以实现实时监听网络状态的变化;

2.但是在Android7.0之后,如果我们需要实时监听监听网络状态变化,需要动态注册广播;

静态注册和动态注册的区别

动态注册:

1.广播会跟Activity的生命周期结束而结束;

2.自由的控制注册和取消,有很大的灵活性。

静态注册:

1.广播不会跟随Activity的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接收广播;

2.全局的广播。

使用广播思路分析:

1.创建广播接收者BroadCastReceiver类

2.onCreate方法中注册/onDestroy方法中解除注册(不需要在清单文件中注册)

3.调用sendBroadcast()方法发送广播

4.onReceiver(Context context,Intent intent)方法处理广播

动态注册:

static TextView tv1;
    MyReceiver myReceiver;
    public static Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what == 200) {
                String str = msg.obj.toString();
                Log.i("--ss", "handleMessage: "+str);
                tv1.setText(str);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1 = findViewById(R.id.tv1);
        myReceiver = new MyReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.bw.wpc");
        registerReceiver(myReceiver,intentFilter);
    }

    public void senddata(View view) {
        Intent intent1 = new Intent();
        intent1.setAction("com.bw.wpc");
        Bundle bundle = new Bundle();
        bundle.putString("name","张学友");
        intent1.putExtras(bundle);
        sendBroadcast(intent1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
@Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("com.bw.wpc")){
            Log.i("---show", "onReceive: ");
            Bundle bundle = intent.getExtras();
            Message message = Message.obtain();
            message.what=200;
            String name = bundle.getString("name");
            message.obj = name;
            MainActivity.handler.sendMessage(message);
        }
    }

静态注册:

public void broad(View view) {
        Intent intent1 = new Intent();
        intent1.setAction("com.bw.wpc");
        Bundle bundle = new Bundle();
        bundle.putString("name","牛马");
        bundle.putInt("age",21);
        bundle.putFloat("money",33.2f);
        intent1.putExtras(bundle);
        sendBroadcast(intent1);
    }
@Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("com.bw.wpc")){
            Bundle extras = intent.getExtras();
            String name = extras.getString("name");
            int age = extras.getInt("age");
            float money = extras.getFloat("money");
            Toast.makeText(context,"接受到了,静态广播"+name+age+money,Toast.LENGTH_SHORT).show();
        }
    }
<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.bw.wpc"></action>
            </intent-filter>
        </receiver>             //清单文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值