2012-03-13 5 views
0

Я использую следующий код для проверки моего подключения к Интернету.проверка подключения к Интернету

private boolean haveNetworkConnection() { 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected() && ni.isAvailable()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected() && ni.isAvailable()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } 

но в нем говорится, что у меня есть подключение к интернету, либо подключение к Интернету отключено или подключено. и этот метод вызывается в середине метода onCreate() и закрывает приложение кнопкой «назад». Пожалуйста помоги мне с этим.

+5

Что вы хотите достичь? Совершенно непонятно, о чем вы спрашиваете. – Egor

+0

Он всегда возвращает «true» независимо от того, подключен ли я к интернету или нет. – ssrp

+0

Метод oncreate() использует параметр, называемый savedInstanceState, будет ли это проблемой. – ssrp

ответ

1

вы можете добиться этого, слушая предназначение трансляции Connectiviy. Таким образом, создать свой широковещательный приемник и в чеке onReceive обратного вызова для:

boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 

запомнить фильтровать намерение с android.net.conn.CONNECTIVITY_CHANGE

Edit: посмотрите BroadcastReceiver документ

надеюсь, что это помогает

+0

Метод oncreate() использует параметр, называемый savedInstanceState, будет ли это проблемой. – ssrp

+0

На самом деле я не понимаю, что вы имеете в виду. Не могли бы вы переформулировать – Blackbelt

0
public boolean checkConnection() 
    { 
     //ARE WE CONNECTED TO THE NET 
     ConnectivityManager conMgr = (ConnectivityManager) getSystemService (YourActivityClassName.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable()&& conMgr.getActiveNetworkInfo().isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

Добавить это в файл манифеста, а затем попробуйте.

Попробуйте с этим. Я использовал это в одном из своих проектов, и он отлично работает для меня .. Надеюсь, это поможет вам ...

+0

попробовал это. как раньше. Спасибо. – ssrp

+0

Вы получаете ошибку? Если да, то plz предоставляет журнал ошибок. Потому что это работает для моего приложения ... – Scorpion

+0

Нет ошибок. Ниже мой полный код! – ssrp

0

Если ваш цель заключается в общении с конкретным сервером (или доменом), то вы можете использовать

try { 
     InetAddress.getByName(SERVER).isReachable(CONNECTIVITY_TIMEOUT); 
    } catch (UnknownHostException e1) { 
     //unknown host 
    } catch (IOException e1) { 
     //IO exception 
    } 

eg SERVER=stackoverflow.com; CONNECTIVITY_TIMOUT=1000; // 1 second

+0

Что такое объявление «InetAddress» здесь? – ssrp

+0

@ssrp его класс java .. import java.net.InetAddress; или просто Ctrl + Shift + o в Eclipse. – Joe

+0

Как я могу узнать, когда происходит тайм-аут? – ssrp

0

Вы писали разрешения в manifest.xml.

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Если вы проверяете эмулятор, U должен установить соединение в настройках.

+0

Да. И это не дает ошибок. – ssrp

1

Во-первых, добавить эти строки эти два разрешения кода в файле AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Затем в коде Java:

//declaration 
    boolean net; 

    //onCreate 

    net = isOnline(); 

    if (net == true) { 
          //perform internet related task 
         } else { 
          AlertDialog.Builder alert = new AlertDialog.Builder(
            AddSite.this); 

          alert.setMessage(
            "No signal found or Internet connection is not connected.") 
            .setTitle("Error") 
            .setNeutralButton("OK", 
              new DialogInterface.OnClickListener() { 

               public void onClick(
                 DialogInterface dialog, 
                 int which) { 
                // TODO Auto-generated method 
                // stub 

               } 
              }).show(); 
         } 

    //method 

    public boolean isOnline() { 
      ConnectivityManager cm = (ConnectivityManager) this 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 

      NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo(); 
      return activeNetworkInfo != null; 

      // return cm.getActiveNetworkInfo().isConnected(); 

     } 
+0

Метод oncreate() использует параметр, называемый savedInstanceState, будет ли это проблемой? – ssrp

Смежные вопросы