Android 監聽網絡的變化

openkk1 13年前發布 | 54K 次閱讀 Android Android開發 移動開發

Android中網絡情況時有變化,比如從有網到沒網,從wifi到gprs,gprs又從cmwap到cmnet...等等!
如果你的程序有些功能是需要網絡支持的,有時候就需要監聽到網絡的變化情況進行相應的處理。
比如說下載一個文件,如果突然斷網了,怎么處理?網絡又恢復了,如何監聽到并重連?
 
當網絡變化的時候系統會發出義個廣播broadcast,只要在程序中注冊一個廣播接收器BroadcastReceiver,并在IntentFilter中添加相應的過濾,這樣一旦網絡有變化,程序就能監聽到

  public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
  private void registerDateTransReceiver() {
 Log.i(TAG, "register receiver " + CONNECTIVITY_CHANGE_ACTION);
 IntentFilter filter = new IntentFilter();
 filter.addAction(CONNECTIVITY_CHANGE_ACTION);
 filter.setPriority(1000);
 registerReceiver(new MyReceiver(), filter);
 }

在MyReceiver中:

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i(TAG, "PfDataTransReceiver receive action " + action);
        if(TextUtils.equals(action, CONNECTIVITY_CHANGE_ACTION)){//網絡變化的時候會發送通知
            Log.i(TAG, "網絡變化了");
            return;
        }
    }

當網絡變化時,從有網到沒網也會發廣播,就舉的例子來說,如果下載時斷網了,接收到廣播的時候要判斷當前網絡是可用還是不可用狀態,如果可用進行什么操作;不可用進行什么操作:

    public static NetworkInfo getActiveNetwork(Context context){
        if (context == null)
            return null;
        ConnectivityManager mConnMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (mConnMgr == null)
            return null;
        NetworkInfo aActiveInfo = mConnMgr.getActiveNetworkInfo(); // 獲取活動網絡連接信息
        return aActiveInfo;
    }


這個方法返回的aActiveInfo可以判斷網絡的有無,如果返回的是null,這時候是斷網了,如果返回對象不為空,則是連上了網。在返回的NetworkInfo對象里,可以有對象的方法獲取更多的當前網絡信息,比如是wifi還是cmwap等,就不多說了。

 本文由用戶 openkk1 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!