Android 为什么ping可以在某些设备上工作,而不能在其他设备上工作?

Android 为什么ping可以在某些设备上工作,而不能在其他设备上工作?,android,ping,connectivity,android-internet,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(); 。。。我发现它在某些设备(如摩托罗拉g)上工作(返回0),但在其他设备(如Galaxy S3)上不工作(返回2)。我已经检查了Galaxy S3设备,它肯定有一个“/system/bin/ping”文件,当然我

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

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”文件,当然我已经确保它确实连接到了互联网


有人知道为什么命令在某些设备上不起作用吗。。。我能做些什么来让它工作呢?

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

S3确实支持du,但它不接受一些参数,如-m(以兆字节为单位显示),而较新的设备,如Moto G,甚至三星设备(过去的Galaxy S5)也支持它。尝试在S3中的ADBShell上运行ping-C18.8.8.8,您会注意到这不是您的Java代码,而是OEM代码

同样,根据Android版本和设备的不同,即使是dumpsys等命令也有不同格式的输出。因此,最好使用完全不同的方法,使用Android中提供的API尝试ping所需的IP,而不是使用每个OEM可能支持不同参数的流程

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

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


来源:我在一家OEM公司工作。

已解决:需要让手机知道是在lan网络上。安装一个网络管理应用程序“Ip工具”,点击“Lan扫描仪”,你会看到网络中连接的所有其他设备,现在再次检查ping是否正常工作

你在根设备上测试过吗?没有。我正在寻找一种方法,使它在非根设备上工作。你有什么解决方案吗?普尼特,请看这里:嘿,你能解释一下如何在adb shell上运行“ping-c 1 8.8.8.8”,因为我面临着同样的问题。ping在4.2.2设备上工作(如果工作时间超过25000ms)如何解决此问题?Punit,无法在所有Android设备上可靠地调用
ping
命令。那么如何解决此问题,因为我正在使用这行“runtime.exec”(“ping-C1”+url)”但是它不适用于4.2.2设备,同样适用于其他设备你好,先生,现在有没有办法在所有设备上执行这个ping(“ping-c1-s102hostaddress”)命令?"