程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> android-在Android上,怎麼檢查網絡訪問? InetAddress類也沒有超時。

android-在Android上,怎麼檢查網絡訪問? InetAddress類也沒有超時。

編輯:編程綜合問答
在Android上,怎麼檢查網絡訪問? InetAddress類也沒有超時。

我用AsyncTask來檢查連接到主機的網絡。但是doInBackground從來都沒有超時。有人知道為什麼?

public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean>{

private Main main;

public HostAvailabilityTask(Main main){
    this.main = main;
}

protected Boolean doInBackground(String... params) {
    Main.Log("doInBackground() isHostAvailable():"+params[0]);

    try {
        return InetAddress.getByName(params[0]).isReachable(30); 
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;       
}

protected void onPostExecute(Boolean... result) {
    Main.Log("onPostExecute()");

    if(result[0] == false){
        main.setContentView(R.layout.splash);
        return;
    }

    main.continueAfterHostCheck();
}

}

最佳回答:


僅僅是對mansuifengqi的答案的一個編輯--如果手機處於飛行模式(或者是在其他沒有網絡的情況下),cm.getActiveNetworkInfo()可能是空值,所以你需要增加一個對空值的檢查。
修改後的解決方案如下:

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

另外一個需要注意的點是,如果你在被給定的時間點上完全的需要連接網絡,那麼它可能更好的是適用netInfo.isConnected(),而不是netInfo.isConnectedOrConnecting。我猜著不過是適用單獨的用例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved