Adi*_*ain 8 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();
Run Code Online (Sandbox Code Playgroud)
...我发现它在某些设备(例如Motorola G)上工作(返回0)但在其他设备(例如Galaxy S3)上不起作用(返回2).我已经检查了Galaxy S3设备,它肯定有一个"/ system/bin/ping"文件,当然我已经确定它确实连接到了互联网.
任何人都有任何想法为什么命令可能无法在某些设备上工作......以及我可以做些什么来让它工作?
小智 20
为每个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需要根级别权限(在特定设备上),这也可能是它无法工作的原因.它最终取决于他们如何定制Android的OEM.
资料来源:我在OEM工作.
归档时间: |
|
查看次数: |
3833 次 |
最近记录: |