2010-05-02 4 views
16

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

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

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" /> 

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

Надеюсь, что кто-нибудь знает решение этого вопроса.

Заранее благодарен!

ответ

25

Если крах непосредственно на линии:

return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

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

+0

Doh, это то, что я должен был видеть. Благодарю. – Charles

+6

Да, это помогло бы, если бы существовала документация для 'getActiveNetworkInfo()'. :-) – CommonsWare

+0

, пожалуйста, помогите \ ni вставить всю функцию, но их красная линия подпадает под систему getsystemservice ... и eclipse не дает никаких предложений. Пожалуйста, предложите некоторое решение о том, как проверить подключение к Интернету. – Sourabh

8

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

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; 
    } 
} 

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

+9

Что относительно: return (ni! = Null && ni.isAvailable() && ni.подключен()); : P –

4

Чтобы проверить Интернет там или не может быть проверено только на устройстве .... ..On эмулятор не может работать .... я получил следующий код & оборотный 100% на андроид устройства ..... :)

@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; 
      } 
     } 

}

+0

такой же, как указано выше :) –

+0

Привет - почему вы говорите, что он может не работать на эмуляторе? – ostergaard

-2

использовать это detemine если connceted к WiFi/3g:

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

и это для того, чтобы WiFi себя:

WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE); 
        wifiManager.setWifiEnabled(true);  
+0

Отсутствует половина его. –

1

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

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; 
        } 

     } 
+0

getAllNetworkInfo() не работает AS WELL. (в Android 2.3) –

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