您的位置:首页 > 其它

全局大喇叭 广播机制

2016-04-17 08:19 351 查看
广播机制简介

Android中的广播机制更加灵活,因为它可以对它感兴趣的广播进行注册,这样程序就只会接收它感兴趣的广播了,这些广播可能来源与系统,也可以来源于其它应用程序。发送广播使用Intent,而就收广播使用广播接受器(Broadcast Receiver)。

广播的类型:标准广播和有序广播

标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时间接受到这条广播消息。因为它们没有任何的先后顺序而言。这种广播的效率比较高,同时也意味着无法被截断。



有序广播 :是一种同步执行的广播,在广播发出去之后,在同一时刻,只能有一个广播接收器能够接收到这条广播消息,当这个广播接收器中的逻辑执行完成后,广播才会继续执行。所有此时的广播接收器都是有先后顺序的,优先级高的广播就可以先收到消息,并且前面的广播接收器还可以截断正在传递的广播。这样后面的广播接收器就无法接收到消息了。



接收系统广播

Android内置了很多系统级别的广播,列如 手机开机时会发出一条广播,电池电量发生变化时会发出一条广播,如果想要接收这些广播,就要使用广播接收器。

注册广播的方式:在代码中注册和在AndroidManifest.xml中注册,前者称为动态注册,后则称为静态注册。

动态注册监听网络变化

public class MainActivity extends AppCompatActivity {

private BroadcastReceiver broadcast1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

broadcast1 = new MyBroadcast1();
//动态注册广播,要监听的action
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
//注册广播
registerReceiver(broadcast1,intentFilter);

}

@Override
protected void onDestroy() {
super.onDestroy();
//取消注册
unregisterReceiver(broadcast1);

} }


public class MyBroadcast1 extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

//接收到广播处理的事情

ConnectivityManager connectivityManager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();


//判断网络连接的状态

if(networkInfo != null && networkInfo.isAvailable()){

Toast.makeText(context,”连接正常”,Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(context,"无服务",Toast.LENGTH_SHORT).show();

}
}


}

“`

1. 需要注意的是,动态注册的广播接收器一定要在onDestory()方法中取消注册才可以。

2. 这里我们指定的action是 android.net.conn.CONNECTIVITY_CHANGE

在网络发生变化时,系统就会发出这样一条广播。通过registerReceiver方法,就将我们要监听的广播和 广播接收器的实例传递进去,实现了监听网络变化的功能。

3. 通过context.getSystemService方法来得到系统服务类专门用于管理网络连接的,通过getActiveNetworkInfo()可以得到NetworkInfo的实例,接着判断当前的网络状态。

4. 查询网络状态需要权限,在AndroidMainfestz中添加权限

android.permission.ACCESS_NETWORK_STATE”/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  broadcast