2016-04-20 6 views
1

Ich muss erkennen, ob eine Internetverbindung verfügbar ist und funktioniert gut in android. Ich muss diese Bedingungsprüfung aufrufen, bevor ich eine meiner WebView-Aktivitäten starte.Ermitteln, ob eine Internetverbindung verfügbar ist und unter Android API 15+ funktioniert

Bisher habe ich es geschafft, die isAvailable() Funktion implementieren in dieser Antwort gefunden: Class which check for connectivity

jedoch die oben Verfahren für den Fall, schlägt fehl, wenn Wi-Fi aktiviert ist, aber Ethernet-Stecker ist nicht angeschlossen. Manche sagen, mit Ping ist eine gute Idee. Aber ich kann dieses Feature nicht erfolgreich implementieren.

  1. Wie kann ich die Ping-Funktion in dem in der verwendeten Retrofit-API für das Senden und Empfangen von PHP Inhalt link
  2. Meiner Android-Anwendung bestimmten Code implementieren. Kann Retrofit Hilfe beim Überprüfen der Internetkonnektivität geben?
  3. Können Sie vorschlagen, andere einfache und einfach zu implementieren Methode zur Überprüfung Echtzeit Internet-Konnektivität?

Code I von this link verwendet haben: -

  1. Klassenname: AppStatus

    import android.content.Context; 
        import android.net.ConnectivityManager; 
        import android.net.NetworkInfo; 
        import android.util.Log; 
        public class AppStatus { 
    
        private static AppStatus instance = new AppStatus(); 
        static Context context; 
        ConnectivityManager connectivityManager; 
        NetworkInfo wifiInfo, mobileInfo; 
        boolean connected = false; 
    
        public static AppStatus getInstance(Context ctx) { 
          context = ctx.getApplicationContext(); 
          return instance; 
         } 
    
         public boolean isOnline() { 
    try { 
        connectivityManager = (ConnectivityManager) context 
           .getSystemService(Context.CONNECTIVITY_SERVICE); 
    
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
    connected = networkInfo != null && networkInfo.isAvailable() && 
         networkInfo.isConnected(); 
    return connected; 
    
    
    } catch (Exception e) { 
        System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
        Log.v("connectivity", e.toString()); 
    } 
    return connected; 
    

    }

  2. Dieser Code für Internet-Konnektivität bei der Prüfung hilft, aber nicht in der vorgenannter Zustand: -

    if (AppStatus.getInstance(this).isOnline()) { 
        Toast.makeText(this,"You are online!!!!",8000).show(); 
    } else { 
        Toast.makeText(this,"Internet Connection is required !",8000).show(); 
        Log.v("Home", "############################You are not online!!!!"); 
        finish(); 
    } 
    
+1

Mögliches Duplikat [Wie Internet-Zugang auf Android überprüfen? InetAddress nie Timeouts ...] (http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts) – camelCaseCoder

+0

Warten. Lass mich das überprüfen. – Hemang

+1

Es scheint den PING-Code zu haben, den ich brauche. Ill versuchen, es mit meinem Code zu integrieren und zu sehen. – Hemang

Antwort

0
public static boolean isNetworkAvailable(Context mContext) { 

    ConnectivityManager cm = (ConnectivityManager) mContext 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     Log.e("Network Testing", "***Available***"); 
     return true; 
    } 
    Log.e("Network Testing", "***Not Available***"); 
    return false; 
} 
0

Dank @camelCaseCoder ‚s Kommentar. Ich habe einen Code bekommen, den ich erfolgreich implementiert habe und ich möchte ihn mit euch teilen und beantworte daher meine eigene Frage.

  1. AppStatus wird (nach dem vorherigen Code zu kommentieren out): -

     public class AppStatus { 
    
         private static AppStatus instance = new AppStatus(); 
         static Context context; 
         //ConnectivityManager connectivityManager; 
         //NetworkInfo wifiInfo, mobileInfo; 
         //boolean connected = false; 
    
         public static AppStatus getInstance(Context ctx) { 
          context = ctx.getApplicationContext(); 
          return instance; 
         } 
    
         public boolean isOnline() { 
          /*try { 
        connectivityManager = (ConnectivityManager) context 
          .getSystemService(Context.CONNECTIVITY_SERVICE); 
    
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
        connected = networkInfo != null && networkInfo.isAvailable() && 
          networkInfo.isConnected(); 
        return connected; 
    
    
    } catch (Exception e) { 
        System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
        Log.v("connectivity", e.toString()); 
    } 
    return connected; 
    */ 
    Runtime runtime = Runtime.getRuntime(); 
    try { 
    
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
        int  exitValue = ipProcess.waitFor(); 
        return (exitValue == 0); 
    
    } catch (IOException e)   { e.printStackTrace(); } 
    catch (InterruptedException e) { e.printStackTrace(); } 
    
    return false; 
    

    }

}

  1. Es ist implementiert ented ähnlich wie zuvor: -

    //check for internet connectivity by calling isOnline-using Ping @google 
    if (AppStatus.getInstance(this).isOnline()) { 
        Toast.makeText(this, "You are online!!!!", 8000).show(); 
    } else { 
        Toast.makeText(this,"Internet Connection is required !",8000).show(); 
        Log.v("Home", "############################You are not online!!!!"); 
        finish(); 
    } 
    
+0

Froh, dass es dein Problem gelöst hat! – camelCaseCoder

Verwandte Themen