Android广播——Broadcast使用探索

1.
摘要由CSDN通过智能技术生成

1. 广播概述

Broadcast就是应用间的全局大喇叭,即通信的一个手段。Android中每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序只会接收到自己关心的广播内容。这些广播可能来自系统,也可能来自其他应用程序。发送广播借助Intent,接收广播需要引入一个新的概念——广播接收器(Broadcast Receiver)。

BroadcastReceiver 是对发送出来的 Broadcast 进行过滤、接受和响应的组件。首先将要发送的消息和用于过滤的信息(Action,Category)装入一个 Intent 对象,然后通过调用Context.sendBroadcast()sendOrderBroadcast() 方法把 Intent 对象以广播形式发送出去。 广播发送出去后,所以已注册的 BroadcastReceiver 会检查注册时的 IntentFilter 是否与发送的 Intent 相匹配,若匹配则会调用 BroadcastReceiver 的 onReceiver()方法

所以当我们定义一个 BroadcastReceiver 的时候,都需要实现 onReceiver()方法。BroadcastReceiver 的生命周期很短,在执行 onReceiver() 方法时才有效,一旦执行完毕,该Receiver 的生命周期就结束了

1.1 广播类型

Android中广播主要分为两种类型:标准广播有序广播。
在这里插入图片描述

2. 接收广播系统

android 内置了很多系统级别的广播,可以在应用程序中通过监听这些波光来得到各种系统的状态信息。想要接收这些广播,需要使用广播接收器。注册的方法又分为两种:动态与静态

2.1 动态注册(监听网络变化)

动态注册 BroadcastReceiver 是在代码中定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调用 Context.registerReceiver() 方法,调用 Context.unregisterReceiver()方法取消注册,此时就不需要在清单文件中注册 Receiver 了

创建一个广播接收器,只需要新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法就可以。当有广播来,onReceive()方法就会得到执行,具体逻辑可以再这个方法中处理。

示例:(监听网络变化

  • 修改MainActivity.java代码
public class MainActivity extends AppCompatActivity {
   

    private IntentFilter intentFilter;

    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
   
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
   

        @Override
        public void onReceive(Context context, Intent intent) {
   
            ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
   
                Toast.makeText(context, "network is Connected", Toast.LENGTH_SHORT).show(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值