Android проверяет подключение к сети при использовании статического IP - PullRequest
0 голосов
/ 09 января 2012

У меня небольшая проблема с обнаружением интернет-соединения при использовании статического IP-адреса на устройстве. Пока я подключаюсь без установки статического ip, моя функция определения доступного соединения работает правильно. Но когда я устанавливаю статический IP-адрес, функция возвращает значение true, потому что я подключен к Wi-Fi или 3G, но у меня нет подключения к Интернету, и в этом случае происходит сбой моего приложения. Любые идеи, как решить эту проблему при использовании статического IP? Вот что я использую:

public boolean chkNetworkStatus(Context context) {
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
     if (connectivity == null) {
         Toast.makeText(context, "No available connection!", Toast.LENGTH_LONG);
     } else {
         NetworkInfo[] info = connectivity.getAllNetworkInfo();
         if (info != null) {
            for (int i = 0; i < info.length; i++) {
                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                 }
             }
         }
     }
     return false; 
}

Ответы [ 2 ]

0 голосов
/ 23 января 2012

Вот что вы можете использовать в вашей ситуации.Эта функция вернет true, если вы подключены к Wi-Fi / 3g, и вы можете загрузить любую веб-страницу.

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

    public static boolean chkNetworkStatus(Context context) {
    boolean result = false;
    new Thread() {
        @Override
        public void run() {


           for(int i=0;i<3;i++){
           HttpGet requestForTest = new HttpGet("http://m.google.com");
           try {
                  new DefaultHttpClient().execute(requestForTest);
                  responded = true;
                } catch (Exception e) {
                    responded = false;
                }
           }
        }
    }.start();
    boolean isOnline = isOnline(context);
    if(responded && isOnline){
        result = true;
    } else {
        result = false;
    }

    Log.e("","responded : "+responded);
    return result;
}
0 голосов
/ 09 января 2012

Используйте этот метод .... Надеюсь, он вам пригодится.

public boolean checkNetworkConnection (Context context) {

    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    if (activeNetwork != null) {
        return activeNetwork.isConnectedOrConnecting();
    }

    NetworkInfo wifiNetwork = cm
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null) {
        return wifiNetwork.isConnectedOrConnecting();
    }

    NetworkInfo mobileNetwork = cm
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (mobileNetwork != null) {
        return mobileNetwork.isConnectedOrConnecting();
    }

    NetworkInfo otherNetwork = cm.getActiveNetworkInfo();
    if (otherNetwork != null) {
        return otherNetwork.isConnectedOrConnecting();
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...