Android之广播机制—动态注册

来源:互联网 发布:淘宝活动时间 编辑:程序博客网 时间:2024/05/02 02:37
动态注册,即在代码中完成注册。好处是我们可以自由的控制注册与注销。
灵活性方面有很大的优势。

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

@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", "绑定成功!");                 }    }        //以上两个按钮会改变当前的网络状态,我们创建了一个改变网络状态的广播接收器。//所以每当点击按钮,网络发生改变时,我们就能接收到广播了。


0 0
原创粉丝点击