Warum funktioniert Ping an einigen Geräten und nicht anderen?

Ich habe den folgenden Code in meiner App …

Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); return process.waitFor(); 

… und ich sehe, dass es bei einigen Geräten (z. B. Motorola G) funktioniert (liefert 0), aber es funktioniert nicht (Rückkehr 2) auf anderen Geräten (zB Galaxy S3). Ich habe das Galaxy S3 Gerät überprüft und es hat definitiv eine "/ system / bin / ping" Datei und natürlich habe ich sichergestellt, dass es tatsächlich mit dem Internet verbunden ist.

  • Wie bekomme ich die Zeitzone Offset in GMT (wie GMT + 7: 00) von Android-Gerät?
  • Wie man Knopf und Textfarbe dynamisch auf android ändert
  • Hinzufügen von Ansicht zum Boden des Layouts in einer Scrollansicht
  • Maven vs Ant für automatische Builds in Android-Anwendungen
  • Android: Wo sind Datenbankdateien gespeichert?
  • Wie bekomme ich recylerview nach der niedrigsten nummer / String android studio
  • Jeder hat irgendwelche Ideen, warum der Befehl an einigen Geräten nicht funktionieren könnte … und was ich tun kann, um es zu arbeiten?

  • Erstellen eines Dienstes, um die Datenbankverbindung zwischen allen Aktivitäten in der Android App zu teilen?
  • GetImageResource () Android. Ist das möglich?
  • Hören Sie einen Shoutcast mit Android
  • Wie bekomme ich den Paketnamen des aktuellen Launcher in Android 2.3 und höher?
  • Android Hintergrund Bild zu füllen Bildschirm
  • Android-Dialog ohne Tasten
  • One Solution collect form web for “Warum funktioniert Ping an einigen Geräten und nicht anderen?”

    Die Art und Weise, die Ping für jeden OEM (Original Equipment Manufacturer) implementiert wird, kann unterschiedlich sein. Das ist nicht nur auf Ping beschränkt. Zum Beispiel, versuchen Sie den linux du Befehl auf alten Samsung Geräte (S3) und neuere Geräte (Motorola G) auf Adb Shell.

    Die S3 unterstützt du, aber es braucht nicht einige Parameter wie -m (Anzeige in Megabyte), während neuere Geräte wie Moto G oder sogar Samsung Geräte (vorbei an Galaxy S5) es unterstützen. Versuche es, ping -c 1 8.8.8.8 auf Adb-Shell innerhalb von S3 zu laufen, und du wirst merken, dass es nicht dein Java-Code ist, es ist der OEM.

    Auch hier haben auch Befehle wie Dumpsys je nach Android Version und Gerät unterschiedlich formatiert. Aus diesem Grund wäre es am besten, wenn Sie eine völlig andere Methode verwenden können, um zu versuchen, die gewünschte IP mit APIs in Android zu versorgen, anstatt einen Prozess mit Parametern zu verwenden, die je nach OEM unterschiedlich unterstützt werden können.

    Es kann auch sein, dass die Berechtigungen je Gerät unterschiedlich sind.

    Wenn Sie einen Prozess innerhalb Ihrer App ausführen, gewähren Sie nur die beschränkten Berechtigungen der App für den Prozess. Also, wenn Ping benötigt Root-Level-Erlaubnis (auf dem spezifischen Gerät), das kann auch der Grund, warum es nicht funktioniert. Es ist letztlich bis zu dem OEM, wie sie Android angepasst.

    Quelle: Ich arbeite bei einem OEM.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.