为什么ping适用于某些设备而不适用于其他设备?

时间:2015-09-23 21:05:17

标签: android ping connectivity android-internet

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

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

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

任何人都有任何想法为什么命令可能在某些设备上工作......以及我可以做些什么来让它工作?

2 个答案:

答案 0 :(得分:19)

为每个OEM(原始设备制造商)实施ping的方式可能不同。这不仅限于ping。例如,尝试在adb shell上的旧三星设备(S3)和更新的设备(Motorola G)上运行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需要根级别权限(在特定设备上),这也可能是它无法工作的原因。它最终取决于OEM如何定制Android。

来源:我在OEM工作。

答案 1 :(得分:-2)

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