Android開發入門之實現動態註冊廣播監聽網路變化
最近在學習Android開發中廣播的相關內容。
註冊廣播的方式有兩種,在程式碼中註冊和在AndroidManifest.xml中註冊,其中前者也被稱為動態註冊,後者被稱為靜態註冊。以註冊廣播監聽網路變化為例,附上實現動態註冊的步驟:
1、
class NetworkChangeReceiver 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, "network is available", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(context, "network is not available", Toast.LENGTH_LONG).show(); } } }
定義內部類NetworkChangeReceiver,使它繼承BroadcastReceiver類,並重寫父類的onReceive()方法。在onReceiver()方法中,首先通過getSystemService()方法得到了ConnectivityManager的例項,這是一個用於管理網路連線的系統服務類。然後呼叫它的getActiveNetworkInfo()方法可以得到NetWorkInfo的例項,接著呼叫NetworkInfo的isAvailable()方法就可以判斷當前是否有網路了。在這裡我是通過Toast的方式對使用者進行提示。(只會這個啊QAQ)
2、
private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); }
繼續建立一個IntentFilter的例項,並且給它新增一個值為android.net.conn.CONNECTIVITY_CHANGE的action。再建立一個NetworkChangeReceiver的例項,然後呼叫registerReceiver()方法進行註冊,將兩個例項傳進去。這樣NetworkChangeReceiver就會收到所有值為android.net.conn.CONNECTIVITY_CHANGE的廣播,也就實現了監聽網路變化的功能。
不過,不要忘了下面的操作:
@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); }
重寫onDestroy()方法時,要呼叫unregisterReceiver()方法取消註冊。
此外,在AndroidManifest.xml中還要增加對許可權的宣告如下所示:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
至此,就大功告成了。明天繼續學習如何靜態註冊廣播。