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]