動态注冊,即在代碼中完成注冊。好處是我們可以自由的控制注冊與登出。
靈活性方面有很大的優勢。
需要注意的是,動态注冊的廣播接收器一定要取消注冊才行。
@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", "綁定成功!");
}
}
//以上兩個按鈕會改變目前的網絡狀态,我們建立了一個改變網絡狀态的廣播接收器。
//是以每當點選按鈕,網絡發生改變時,我們就能接收到廣播了。