2015-11-06 2 views
0

Я использую ConnectivityManager обнаружить, есть ли подключение к Интернету или нет, однако, это говорит лишь о том, что независимо от того, есть ли действительно подключение интернета или нет, я слышал, это может будет обнаружено путем отправки писем в https://www.google.com/. я также хотел бы показать тосты.Обнаружение подключения к Интернету андроид

ConnectivityManager cmanager =  (ConnectivityManager)getSystemService(this.CONNECTIVITY_SERVICE); 
    NetworkInfo info = cmanager.getActiveNetworkInfo(); 
    if(info!=null && info.isConnected()) { 
     if(info.getType() == ConnectivityManager.TYPE_WIFI) { 
      Toast.makeText(MainActivity.this, "Wifi", Toast.LENGTH_LONG).show(); 
     } else if(info.getType() == ConnectivityManager.TYPE_MOBILE) { 
      Toast.makeText(MainActivity.this, "mobile", Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     Toast.makeText(MainActivity.this, "Not connected", Toast.LENGTH_LONG).show(); 
    } 
} 


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

Вы искали? Проверьте здесь http://stackoverflow.com/questions/3905358/how-to-ping-external-ip-from-java-android –

+0

Я сделал человек, ни один из них, похоже, не работал или не показывал тост – MaggotSauceYumYum

+0

'ни один из них не казался ... show toast' А в чем проблема простого добавления Toast к любому коду (не только к этому конкретному случаю)? –

ответ

0

Я надеюсь, что это вам поможет.

public static boolean thereIsConnection(Context context) { 

    if (SystemHelper.isEmulator(context)) { 
     return true; 
    } 

    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo i = conMgr.getActiveNetworkInfo(); 
    if (i == null) { 
     return false; 
    } 
    if (!i.isConnected()) { 
     return false; 
    } 
    if (!i.isAvailable()) { 
     return false; 
    } 
    return true; 
} 
0

Очень просто, как это:

private boolean haveInternet(){ 
NetworkInfo info = ((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
if (info==null || !info.isConnected()) { 
return false; 
} 
if (info.isRoaming()) { 
// here is the roaming option you can change it if you want to disable internet while roaming, just return false 
return true; 
} 
return true; 
} 
0

Попробуйте это в соответствии с вашей проблемы:

public static boolean hasActiveInternetConnection(Context context) { 
     if (isNetworkAvailable(context)) { 
      try { 
       HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
       urlc.setRequestProperty("User-Agent", "Test"); 
       urlc.setRequestProperty("Connection", "close"); 
       urlc.setConnectTimeout(1500); 
       urlc.connect(); 
       return (urlc.getResponseCode() == 200); 
      } catch (IOException e) { 
       Log.e("Connection Status:", "Error checking internet connection", e); 
      } 
     } else { 
      Log.e("Connection Status:", "No network available!"); 
     } 
     return false; 
    } 

Не забудьте предоставить необходимые разрешения.

& Не запускайте его на главной теме (идите в фоновый поток, например Asynctask).

+0

включите в свой ответ тосты. – MaggotSauceYumYum

+0

Хорошо, но проверьте журнал, если сможете? – Androider

+0

ваш ответ полны ошибок :(можете ли вы отредактировать его и дать мне полную реализацию? Также я хочу настроить это в oncreate – MaggotSauceYumYum

0

Да, вы должны сделать это, пинговая. Это моя сеть работает нормально:

public class NetworkUtil { 

     Context context; 

     public static boolean isConnected(Context context) { 
      return isNetworkAvailable(); 
     } 

     private static boolean isNetworkAvailable() {ConnectivityManager connectivityManager = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 

     if(info!=null && info.isConnected() && canAccessToInternet()) { 
      if(info.getType() == ConnectivityManager.TYPE_WIFI) { 
       Toast.makeText(MainActivity.this, "Wifi", Toast.LENGTH_LONG).show(); 
      } else if(info.getType() == ConnectivityManager.TYPE_MOBILE) { 
       Toast.makeText(MainActivity.this, "mobile", Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } else { 
      Toast.makeText(MainActivity.this, "Not connected", Toast.LENGTH_LONG).show(); 
      return false;  
     } 
    } 

    private static Boolean canAccessToInternet() { 
     Runtime runtime = Runtime.getRuntime(); 
     try { 
      Process ipProcess = runtime.exec("/system/bin/ping -c 1 google.com"); 
      int exitValue = ipProcess.waitFor(); 
      return exitValue == 0; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 

} 
+0

, пожалуйста, включите в свой ответ тосты. – MaggotSauceYumYum

+0

Сделано! Я только что отредактировал –

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