天天看点

Android之广播机制—动态注册

动态注册,即在代码中完成注册。好处是我们可以自由的控制注册与注销。

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

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

@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", "绑定成功!");

         
        }
    }
        //以上两个按钮会改变当前的网络状态,我们创建了一个改变网络状态的广播接收器。
	//所以每当点击按钮,网络发生改变时,我们就能接收到广播了。