全局大喇叭,广播机制初篇。

刚开始接触广播机制的时候有点蒙,不知道全局大喇叭是什么意思,但是Broadcast Receiver又是android的一个重要的组成部分,还是从头开始吧。。。。。
首先广播分为两种,第一种标准广播,它是一种完全异步执行的广播,这也就意味着当广播发出之后,所有的广播接收器都会在同一时刻接收到这条广播,效率非常的高,但同时也意味着它不可以被截断。
第二种广播机制是有序广播,这是一种同步执行的广播,当广播发出之后,会有第一个广播接收器接受这个广播消息。当广播接收器当中的逻辑(也就是onReceiver()方法)被执行完了之后,广播将会传递给下一个广播接收器,也就是说明有序广播是可以被截断的,优先级高的广播接收器先接受到广播,前面的广播接收器截断了正在传递的广播,后面的额广播接收器也就无法接收到广播了。
广播接收器可以自由的对自己感兴趣的广播进行注册,然后处理接受广播的逻辑,注册的方法有两种,一个是在代码中注册,另一个是在AndroidMainfest.xml中注册。
实例:监听网络变化(*在代码中注册****)
首先新建立一个类让他继承自BroadcastReceiver,并且重写父类的onReceive()方法,在这个方法中处理逻辑。
首先我们新建一个类,让它继承自BroadcastReceiver;
class NetWorkChangeReceiver extends BroadcastReceiver
{
//重写onReceive()方法
public void onReceive(Context context,Intent intent)
{
//处理逻辑,在这里我们只简单的用toast输出一下
Toast.makeText(context,”netWork_change”,LENGTH.SHORT).show();
}
}
然后我们在onCreate()方法中实例化NetWorkChangeReceiver
netWorkChangeReceiver=new NetWorkChangeReceiver();
然后我们建立新的IntentFilter;
intentFilter=new IntentFilter();
intentFilter.addAction(“android.net.conn.CONNECTIVITY_CHANGE”);//addAction()里面放的是监听的广播action
然后我们通过registerReceiver()这个方法进行注册,里面包含两个参数,第一个广播接收器,第二个是action所以:
registerReceiver(netWorkChangeReceiver,intentFilter);
最后要在onDestory()方法中进行关闭广播
public void onDestory()
{
unregisterReceiver(netWorkChangeReceiver);
}
//因为我们访问了系统的关键信息,所以我们要在AndroidMainfest.xml文件总进行注册,

优化:
当我们在onReceive()方法中进行逻辑的时候如果我们要是能提示用户当前是否开启了数据模式,回是一个更好的选择。
也就是重写onReceive()
//两个参数第一个,上下文Context,第二个Intent
public void onReceive(Context context Intent intent)
{
//首先通过getSystemService()方法获得ContentActivityManagerde 的实例
ConnectivityManager connectivityManager()=getSystemService(Context.CONNECTACTIVITY_SERVICE);
//然后通过它的方法获得NetworkInfo的实例
NetworkInfo networkInfo=contentActivityService.getActivityNetworkInfo();
if(networkInfo==!null&&networkInfo.isAvailable())
{
Toast.makeText(context,”有网”,LENGTH_SHORT).show();
}ELSE
{
Toast.makeText(context,”没网”,LENGTH_SHORT).show();
}
}
我们也可以在AndroidMainfest.xml文件中进行注册(静态注册)
实例:静态注册实现开机启动
public class BroadcastReceiver extends android.content.BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,”开机”,Toast.LENGTH_LONG).show();
}
}
在mainfest.xml文件的代码为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值