android 广播机制

android的广播机制,在我们开发的过程中,有很多要用到的地方。

广播机制,说白了就是一个发送广播,一个接受广播。

我还是拿我自己的例子来进行说明吧。 


我需要对自己当前的网络进行一个判断。如果当前网络环境断开连接了,或者发生变化什么的。

在这个时候,我们发送一个广播,然后当我们只要接受到这条特定的广播消息以后,弹出toast,提示当前网络断开。就这么一个例子吧。


具体还是边上代码,边说明吧。


1.第一种方法就是配置文件进行注册广播,然后广播接收器接受广播:


我做的是全局的广播。 所以我们首先在我们的Manifest.xml中,对广播进行注册声明:

<!-- 网络连接的广播注册 -->
<receiver android:name=".broadcast.ConnectionChangeReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

action就是我们广播的名字,也就是特定的标识。然后ConnectionChangeReceiver就是我们自己写的广播接收器。

白话一下就是,当我们自定义的这个Receiver接受到action的广播的时候,执行什么样的操作。

个人理解,不对的地方还请大家给予指教。


接下来就是我们的Receiver的接收广播后的代码:

public class ConnectionChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
//            Intent intent1 = new Intent(context, ToastActivity.class);
//            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//            context.startActivity(intent1);

            Toast.makeText(context, "您的网络连接已断开", Toast.LENGTH_SHORT).show();
            //改变背景或者 处理网络的全局变量
        } else {
            //改变背景或者 处理网络的全局变量
        }
    }
}

这就是一个简单的广播发送接收处理逻辑。


2.第二种方法就是所谓的动态注册广播,发送广播的方法了。


首先,我们注册广播接收器:

private DownloadedReceiver receiver;

receiver = new DownloadedReceiver();
this.registerReceiver(receiver, new IntentFilter(ConfigUtil.ACTION_DOWNLOADING));

声明广播接收器,然后进行注册。

动态注册时候要注意: registerReceiver中的两个参数,一个是我们的接收器,一个则是过滤器。

Filter尤其说明一下: 只有我们发送的广播是ConfigUtil.ACTION_DOWNLOADING的时候,我们才能接收到。


接下来就要说一下我们的发送广播的地方了。

发送广播,在我们需要的地方做如下操作:

Intent intent = new Intent(ConfigUtil.ACTION_DOWNLOADING);
intent.putExtra("status", status);
intent.putExtra("title", title);
sendBroadcast(intent);

 一方面,过滤器必须要一致。也就是new Intent(ConfigUtil.ACTION_DOWNLOADING),这个也就是我们的过滤标识,即action。

然后putExtra进行数据的携带。

最后就可以进行sendBroadCast了。发送广播携带我们的intent。里面有action的过滤,有携带的数据。


那么广播接收的具体操作呢?

来了:

//广播接收器
private class DownloadedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getStringExtra("title") != null) {
            currentDownloadTitle = intent.getStringExtra("title");
        }

        int downloadStatus = intent.getIntExtra("status", ParamsUtil.INVALID);
    }
}


这就是我们的广播接收器的具体操作啦。因为注册广播的时候已经与发送广播的过滤进行了匹配,所以具体的操作以及putExtra的数据都可以在这里获取到。


这就是广播的发送接收的两种模式了吧。我做了一些白话方面的解释。网上已经有很多了,个人纯属自己的记录,能看的更加明了。

广播的作用,大家也可以进行联想,其实就是可以让我们在程序中进行传输信息的一种机制。大家可以多方面运用。对广播的了解也是比较重要的。


好啦,结束了。个人微博: 外面的阳光真美,  欢迎大家关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值