2016-06-01 6 views
0

Ich habe ein Problem bezüglich des Geräts ist im Internet verfügbar oder nicht. Lassen Sie mich meine Abfrage in Kürze mit einem Beispiel zu erklären: Ich habe meine Anwendung mit einem Anwendungsfall testen dh ich habe auf meinem Router WLAN, aber ich ziehen Sie das Ethernet-Kabel von meinem Router und verbinden Sie das Gerät über Wi-Fi und durch folgenden Code:Check Internet ist auf dem Gerät verbunden oder nicht, wenn WLAN aktiviert ist

private boolean checkConnection() { 
    boolean connected = false; 
    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (cm != null) { 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 

     for (NetworkInfo ni : netInfo) { 
      if ((ni.getTypeName().equalsIgnoreCase("WIFI") 
       || ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       & ni.isConnected() & ni.isAvailable()) { 
       connected = true; 
      } 

     } 
    } 

    return connected; 
} 

ich werde einen Boolean-Flag für die Konnektivität .Dieses Code erhalten Rückkehr des Gerätestatus der Schalter bedeutet, dass mein Gerät mit WiFi verbunden ist oder nicht, aber ich werde keine Antwort vom Server oder Host erhalten, also muss ich die Internet Machbarkeit auf meinem Gerät überprüfen oder nicht. Bitte helfen Sie mir für die Sam Ich habe viele goggling Ansätze oder Methodik versucht, aber erfolglos.

Vielen Dank im Voraus.

+0

Sie arbeiten Internet testen wollte? –

+0

Ja, ich möchte nur testen, ob das Netzwerk auf dem Gerät verfügbar ist oder nicht. –

+0

http://StackOverflow.com/Questions/4238921/detect-Whether-there-Ist-internet-connection-available-on-android sehen Sie sich eine Antwort auf @mohd Ahsa –

Antwort

0
 On button click 
     if(isInternetON(MainActivity.this)){ 
     mMyDownloadTask = new MyDownloadTask(); 
     delayCancel = new DelayCancel(mMyDownloadTask); 
     handler.postDelayed(delayCancel,3*1000); 
     mMyDownloadTask.execute(); 



     } 



    public static class MyDownloadTask extends AsyncTask<Boolean,Void,Boolean> { 

     public MyDownloadTask() { 

     } 

     protected Boolean doInBackground(Boolean... params) { 
      try { 
       URL url = new URL("http://www.google.com"); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
//    connection.setRequestMethod("Head"); 
//    connection.setConnectTimeout(2000); 
       connection.connect(); 

       int code = connection.getResponseCode(); 
       Log.e(TAG, "code : " + code); 
       if (code == 200) { 
        ThreadActivity.isAviliable = true; 
        MainActivity.value = "true"; 
        return true; 

       } else { 
        ThreadActivity.isAviliable = false; 
        MainActivity.value = "false"; 
        return false; 

       } 

      } catch (Exception e) { 
       ThreadActivity.isAviliable = false; 
       MainActivity.value = "false"; 
       e.printStackTrace(); 
       return false; 
      } 

     } 

     protected void onPostExecute(Boolean result) { 
      // dismiss progress dialog and update ui 
      Log.e(TAG,"result "+result); 
      if(result){ 
       ThreadActivity.isAviliable = true; 
       MainActivity.value = "true"; 
      }else{ 
       ThreadActivity.isAviliable = false; 
       MainActivity.value = "false"; 
      } 

     } 
    } 
    public static class DelayCancel implements Runnable{ 
     private AsyncTask task; 

     public DelayCancel(AsyncTask task) { 
      this.task = task; 

     } 

     @Override 
     public void run() { 
      Log.e(TAG, "Running....."); 
      if (task.getStatus() == AsyncTask.Status.RUNNING) { 
       task.cancel(true); 
       Log.e(TAG, "Cancel 1....."); 
       ThreadActivity.isAviliable = false; 
       MainActivity.value = "false"; 
      } 
      if (task.getStatus() == AsyncTask.Status.PENDING){ 
       task.cancel(true); 
       ThreadActivity.isAviliable = false; 
       MainActivity.value = "false"; 
       Log.e(TAG, "Cancel 2....."); 
      } 
     } 
    } 

    public static boolean isInternetON(Context ctx){ 

     ConnectivityManager cm =(ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

     /* Log.e("Common Class","activeNetwork.getState()"+activeNetwork.getState()); 
     Log.e("Common Class","activeNetwork.isAvailable()"+activeNetwork.isAvailable()); 
     Log.e("Common Class","activeNetwork.getReason()"+activeNetwork.getReason()); 
     Log.e("Common Class","activeNetwork.getExtraInfo()"+activeNetwork.getExtraInfo()); 
     Log.e("Common Class","activeNetwork.describeContents()"+activeNetwork.describeContents()); 
     Log.e("Common Class","activeNetwork.isConnectedOrConnecting()"+activeNetwork.isConnectedOrConnecting()); 
     Log.e("Common Class","activeNetwork.isFailover()"+activeNetwork.isFailover());*/ 

     boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting() && activeNetwork.isAvailable(); 

     return isConnected; 
    } 
+0

das ist die Lösung meines Problems –

0

Wenn Sie müssen prüfen, ob die Verbindung tatsächlich Internet bietet, können Sie versuchen, einige Remote-Host Pingen - Google, zum Beispiel: How to Ping External IP from Java Android

+0

Thx für Ihre Antwort, aber es ist nicht meine Notwendigkeit, wenn ich diesen Code mit meinem Anwendungsfall testen wird es auch gescheitert. –

+0

mein Anwendungsfall ist WLAN-Router ist nicht mit dem Internet verbunden, aber mein Gerät ist mit dem Router verbunden und zeigt, dass mein Gerät mit dem Gerät WLAN verbunden ist und es auch dauert zu lange Zeit wie 30 -40 Sekunden durch die Ausnahme unbekannt- Gastgeber und seine sehr schlecht für Benutzererfahrung Ich möchte nur eine Lösung mit in 3-4 Sekunden, Haben Sie einen Vorschlag für die gleiche –

+0

verwenden Sie Retrofit oder loopj Bibliothek sie haben alle diese Dinge behandelt, die Sie erhalten Fehlercode, wenn Sie nicht bekommen und Datenverkehr von der Verbindung. –

Verwandte Themen