为啥 ping 在某些设备上有效,而在其他设备上无效?

Posted

技术标签:

【中文标题】为啥 ping 在某些设备上有效,而在其他设备上无效?【英文标题】:Why does ping works on some devices and not others?为什么 ping 在某些设备上有效,而在其他设备上无效? 【发布时间】:2015-12-21 08:31:04 【问题描述】:

我的应用中有以下代码...

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

...我看到它在某些设备(例如摩托罗拉 G)上有效(返回 0),但在其他设备(例如 Galaxy S3)上无效(返回 2)。我检查了 Galaxy S3 设备,它肯定有一个“/system/bin/ping”文件,当然我已经确定它确实已连接到互联网。

任何人都知道为什么该命令可能在某些设备上运行......以及我可以做些什么来让它运行?

【问题讨论】:

你在有根设备上测试过吗? 没有。我正在寻找一种方法让它在非 root 设备上工作。 你有什么解决方案? Punit,见这里:adilatwork.blogspot.co.uk/2015/09/… 【参考方案1】:

每个 OEM(原始设备制造商)实施 ping 的方式可能不同。这不仅限于ping。例如,尝试在旧的三星设备 (S3) 和较新的设备 (Motorola G) 上的 adb shell 上运行 linux du 命令。

S3 确实支持 du,但它不需要一些参数,例如 -m(以兆字节显示),而较新的设备,如 Moto G 甚至三星设备(过去的 Galaxy S5)都支持它。尝试在 S3 中的 adb shell 上运行 ping -c 1 8.8.8.8,您会注意到这不是您的 Java 代码,而是 OEM。

同样,即使是诸如 dumpsys 之类的命令也具有不同的格式输出,具体取决于 android 版本和设备。因此,最好使用完全不同的方法尝试使用 Android 中提供的 API ping 所需的 IP,而不是使用每个 OEM 可能支持不同参数的进程。

也可能是每个设备的权限不同。

当您在应用中运行进程时,您只是授予应用对该进程的有限权限。因此,如果 ping 需要 root 级别权限(在特定设备上),这也可能是它不起作用的原因。最终取决于 OEM 如何定制 Android。

来源:我在 OEM 工作。

【讨论】:

嘿,你能解释一下如何在 adb shell 上运行“ping -c 1 8.8.8.8”,因为我面临同样的问题。 ping 在 4.2.2 设备上工作(如果工作需要更多时间然后 25000 毫秒)我该如何解决这个问题?? Punit,ping 命令无法在所有 Android 设备上可靠调用。 那么如何解决这个问题,因为我正在使用这一行 "runtime.exec("ping -c 1 " + url)" 但它不适用于 4.2.2 设备并且同样适用于其他设备 您好先生,现在有什么方法可以在所有设备上执行这个 ping (" ping -c 1 -s 1024 hostAddress" ) 命令吗? "【参考方案2】:

已解决:需要让手机知道在局域网上。安装任何网络管理应用程序“Ip Tools”并单击“Lan扫描仪”您将看到网络中连接的所有其他设备,现在再次检查是否可以正常工作!

【讨论】:

以上是关于为啥 ping 在某些设备上有效,而在其他设备上无效?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SmsManager 在某些设备上需要 READ_PHONE_STATE 权限,而在其他设备上不需要?

为啥 href 在 iOS 上不起作用,而在包括 Mac 在内的任何其他设备上都可以正常工作?

通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?

AVAudioPlayer:音量按钮在某些设备上有效,在其他设备上无效

为啥我的优盘插在我的电脑上无反应呀!

为啥返回后变量提升在某些浏览器上有效,而在某些浏览器上无效?