您的位置:首页 > 移动开发 > Android开发

Android之广播机制—动态注册

2016-04-14 02:25 344 查看
动态注册,即在代码中完成注册。好处是我们可以自由的控制注册与注销。

灵活性方面有很大的优势。

需要注意的是,动态注册的广播接收器一定要取消注册才行。

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//创建一个intentFilter实例,并用其add.Action()方法添加一个Action值。
//这个值的意思就是当网络状态发生变化时,系统就会发出一条广播。
//我们要创建一个网络状态发生变化的广播接收器,所以就将值设为此,意为接收此广播。
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

//创建广播接收器的实例。
maesReceiver=new MaesReceiver();
//调用registerReceiver()方法进行注册和绑定,
//将有Action标签值的intentFilter和接收器实例传入。
//就实现了两者的绑定与注册。
registerReceiver(maesReceiver,intentFilter);

//这是获取WIFI实例的方法。
wifiManager=(WifiManager)MainActivity.this.getSystemService(Context.WIFI_SERVICE);

Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//监听器的意思就是,点击此按钮,就打开WIFI。
wifiManager.setWifiEnabled(true);
}
});
Button button1=(Button)findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//此监听器为关闭WIFI。
wifiManager.setWifiEnabled(false);
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
//用unregisterReceiver()方法取消注册。
unregisterReceiver(maesReceiver);
}
//这是监听器类,这次没有单独创建一个接收器类,而是用的内部类的方式来呈现。
class MaesReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context,Intent intent){

ConnectivityManager connectivityManager=(ConnectivityManager)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();
}
Log.d("TAG", "绑定成功!");

}
}
//以上两个按钮会改变当前的网络状态,我们创建了一个改变网络状态的广播接收器。
//所以每当点击按钮,网络发生改变时,我们就能接收到广播了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: