我尝试在我的应用程序上实现PING命令。我这样做的方法是创建一个进程然后执行命令。 PING命令完成后,我从控制台解析结果。
该方法工作正常。我的问题是当我尝试更改PING命令的间隔时间值时。 PING可以将一个值作为参数,定义2个数据包发送之间的间隔。当我从我的应用程序执行该方法时,结果与使用终端仿真器执行的结果不同。
间隔值强调设备在更短的时间内发送更多数据包。我已将间隔值设置为0.1 ms并检查了两种情况的结果。该设备与终端仿真器配合使用,损失1-2%。使用我的应用程序,结果显示70-80%的损失。
对于1ms的间隔,结果是相同的。 (设备没有压力)
从我所做的不同测试中,我意识到在我的应用程序中调用PING方法时,设备会丢失很多数据包。
这怎么可能?我认为在进程中执行命令与从终端模拟器执行它会产生相同的结果。有什么想法吗?
我使用此处的代码Run shell commands from android program
我知道su不是必需的......
public void runAsRoot(String[] cmds) throws Exception {
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
InputStream is = p.getInputStream();
for (String tmpCmd : cmds) {
os.writeBytes(tmpCmd+"\n");
int readed = 0;
byte[] buff = new byte[4096];
boolean cmdRequiresAnOutput = true;
if (cmdRequiresAnOutput) {
while( is.available() <= 0) {
try { Thread.sleep(5000); } catch(Exception ex) {}
}
while( is.available() > 0) {
readed = is.read(buff);
if ( readed <= 0 ) break;
String seg = new String(buff,0,readed);
result=seg; //result is a string to show in textview
}
}
}
os.writeBytes("exit\n");
os.flush();
答案 0 :(得分:0)
据我所知,从adb shell执行命令与让应用程序调用像Process p = Runtime.getRuntime().exec(" A COMMAND ");
这样的一个示例是dumpsys命令,如果您以programmaticaly方式执行它,则不会返回结果。 (你需要root或自定义内核)......
喜欢这个example
当我从adb和语法中调用ping -c 1000 -i 0.1 www.google.com
时,必须发生类似的事情。