1. 程式人生 > >Android開發入門之實現動態註冊廣播監聽網路變化

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"/>

至此,就大功告成了。明天繼續學習如何靜態註冊廣播。