1. 程式人生 > >Android動態監聽網路變化

Android動態監聽網路變化

廣播接收器可以自由地對自己感興趣的廣播進行註冊,這樣當有相應的廣播接收時,廣播接收器就能收到該廣播,並在內部處理其相應的邏輯。廣播註冊的方法有兩種,在程式碼中註冊與在AndridManifest.xml中註冊,前者稱為動態註冊,後者為靜態註冊,接下來我們就說說關於動態註冊的實現。

第一步:新建一個類,讓其繼承BroadcastReceiver,然後重寫父類中的onReceive()方法,原理是當有廣播來臨時,onReceive()方法就會得到執行

我們新建BroadTest專案,修改MainActivity中的程式碼,在MainActivity中寫一個內部類NetworkChangeReceiver

  //新建此類,讓其繼承BroadcastReceiver,並且重寫onCreate方法
    public class NetworkChangeRecever extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connecttivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);//使用getSystemService得到ConnectivityManager例項
            NetworkInfo networkInfo=connecttivityManager.getActiveNetworkInfo();
            if(networkInfo!=null && networkInfo.isAvailable()) {
                Toast.makeText(context,"networks is available", Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(context,"networks is unavailable", Toast.LENGTH_SHORT).show();

            }
        }
    }
}

使用getSystemService()方法得到ConnectivityManger的例項,這是一個系統服務類,專門用於網路連線。

然後用它的getActiveNetworkInfo()方法得到NetworkInfo的例項

再用NetworkInfo的方法isAvailable()來判斷是否有網,一目瞭然!

第二步:回到onCreate方法中建立例項實現方法

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeRecever networkChangeRecever;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter=new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//新增廣播
        networkChangeRecever=new NetworkChangeRecever();
        registerReceiver(networkChangeRecever,intentFilter);//使用registerReceiver方法進行註冊,將兩例項都傳進去
    }

首先建立IntentFilter例項,給它新增一個值為"android.net.conn.CONNECTIVITY_CHANGE"的action,這個值的作用就是監聽廣播,不同action有不同的作用,這裡不再深究

接下來建立NetworkChangeRecever例項,呼叫registerReceiver方法進行註冊,將IntentFilte與NetworkChangeRecever的例項都傳進去,這樣NetworkChangeRecever就會收到值為"android.net.conn.CONNECTIVITY_CHANGE的廣播,也就實現了監聽網路變化的功能

第三步:動態註冊的廣播接收器一定要取消實現才行

 public void onDestory()
    {
        super.onDestroy();
        unregisterReceiver(networkChangeRecever);
    }
呼叫  unregisterReceiver()方法實現

第四步:聲名網路系統的訪問許可權

AndridManifest.xml中加入一行

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

就可以了!!!

注:執行時不要按back鍵,否則onCreate()方法會執行,應該按home鍵,然後在setting中找到Data usage,嘗試開關網路設定按鈕(Cellular date),可觀察變化

僅供參考@[email protected]