android的广播机制,在我们开发的过程中,有很多要用到的地方。
广播机制,说白了就是一个发送广播,一个接受广播。
我还是拿我自己的例子来进行说明吧。
我需要对自己当前的网络进行一个判断。如果当前网络环境断开连接了,或者发生变化什么的。
在这个时候,我们发送一个广播,然后当我们只要接受到这条特定的广播消息以后,弹出toast,提示当前网络断开。就这么一个例子吧。
具体还是边上代码,边说明吧。
1.第一种方法就是配置文件进行注册广播,然后广播接收器接受广播:
我做的是全局的广播。 所以我们首先在我们的Manifest.xml中,对广播进行注册声明:
android:name=".broadcast.ConnectionChangeReceiver"> android:name="android.net.conn.CONNECTIVITY_CHANGE" />
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的数据都可以在这里获取到。
这就是广播的发送接收的两种模式了吧。我做了一些白话方面的解释。网上已经有很多了,个人纯属自己的记录,能看的更加明了。
广播的作用,大家也可以进行联想,其实就是可以让我们在程序中进行传输信息的一种机制。大家可以多方面运用。对广播的了解也是比较重要的。
好啦,结束了。个人微博: 外面的阳光真美, 欢迎大家关注。