Проблема с проверкой подключения к Интернету на Android

Я новичок в разработке для Android и работаю над приложением для Android, для которого требуется подключение телефона к Интернету через Wi-Fi, EDGE или 3G.

Это код, который я использую, чтобы проверить, доступно ли подключение к Интернету.

public static boolean isConnected()
{
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

Я также установил эти разрешения в файле манифеста.

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

Это отлично работает в эмуляторе Android версии 1.5 при включенном 3G, но происходит сбой, когда я отключаю соединение 3G. Мое приложение генерирует исключение нулевого указателя, когда я вызываю isConnectedOrConnecting(). То же самое происходит и с моим HTC Desire под управлением Android 2.1.

Надеюсь, что кто-нибудь знает решение этой проблемы.

Заранее спасибо!


person Charles    schedule 02.05.2010    source источник


Ответы (5)


Если сбой произошел непосредственно на вашей линии:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

тогда это означает, что getActiveNetworkInfo() вернул null, поскольку активной сети нет — в этом случае ваш метод isConnected() должен вернуть false.

person CommonsWare    schedule 02.05.2010
comment
Дох, это то, что я должен был увидеть. Спасибо. - person Charles; 02.05.2010
comment
Да, было бы лучше, если бы документация для getActiveNetworkInfo() действительно существовала. :-) - person CommonsWare; 02.05.2010
comment
пожалуйста, помогите\n я вставил всю функцию, но это красная линия, идущая под getsystemservice... и eclipse не дает никаких предложений.. пожалуйста, предложите какое-нибудь решение о том, как проверить подключение к Интернету - person Sourabh; 27.03.2011
comment
Используйте IsConnected() вместо isConnectedOrConnecting(). isConnectedOrConnecting() Указывает, существует ли сетевое подключение или находится в процессе установления. Это хорошо для приложений, которым нужно делать что-либо, связанное с сетью, кроме чтения или записи данных. Для последнего вместо этого вызовите isConnected(), что гарантирует, что сеть полностью пригодна для использования. - person Yousha Aleayoub; 13.04.2015

Я написал этот метод, чтобы справиться с этим:

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

Один из способов сделать это, я думаю...

person mutable2112    schedule 19.04.2011
comment
Как насчет: return (ni != null && ni.isAvailable() && ni.isConnected()); :П - person Marek Stój; 22.09.2011

Чтобы проверить, есть ли интернет или нет, можно проверить только на устройстве...... На эмуляторе это может не работать.... У меня есть следующий код, и он работает на 100% на устройстве Android..... :)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView)findViewById(R.id.txt);
    b = checkInternetConnection();


    if(b!=true)
    {
        tv.setText("net is not dr.......");
    }
    else
    {
        tv.setText("net is dr.......");
    }

}
//Check weather Internet connection is available or not
public boolean checkInternetConnection() {
           final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
           if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() &&    conMgr.getActiveNetworkInfo().isConnected()) {
                 return true;
           } else {
                 System.out.println("Internet Connection Not Present");
               return false;
           }
        }

}

person Dhrupal    schedule 09.07.2011

Вы использовали этот фрагмент.

ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null)
      {
          NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null)
              for (int i = 0; i < info.length; i++)
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  {
                      return true;
                  }

      }
person Harshid    schedule 21.12.2012

используйте это, чтобы определить, подключен ли он к Wi-Fi/3g:

is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
    isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
    network = is3g||isWifi;

и это, чтобы включить Wi-Fi самостоятельно:

WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE);
                    wifiManager.setWifiEnabled(true);      
person Yuval    schedule 09.07.2011