为啥 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 在内的任何其他设备上都可以正常工作?
通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?