从app在shell中运行ping命令

时间:2011-03-18 13:22:41

标签: android shell ping

我找到了源代码,它提供了从应用程序运行shell命令的机会,并且,据我所知,返回一个包含已执行命令结果的字符串:

http://code.google.com/p/netmeterled/source/browse/trunk/src/com/britoso/cpustatusled/utilclasses/ShellCommand.java?r=29

我尝试执行“ping -c 3 www.google.com”,但给定的方法返回“Error:null”。我执行命令的方式是:

ShellCommand cmd = new ShellCommand();
CommandResult r = cmd.sh.runWaitFor("ping -c 5 www.google.com");
String text;
if (!r.success()) {
    text = "Error:\n" + r.stderr;
}
else {
    text ="Ping test results:\n" + r.stdout;
}
log(text);

问题出在哪里?

2 个答案:

答案 0 :(得分:2)

你现在可能已经解决了这个问题。但告诉你你不应该这样做似乎没有回答我。显然,如果ping命令不存在,则无法调用它,您可以处理错误。但如果确实如此,哇!

这是一种方法。无论如何,在模拟器2.1上工作。虽然你有一个良好的互联网连接,模拟器喜欢启动。如果您以某种方式启动模拟器并更改连接,则之后可能无法运行。我在模拟器上不需要任何权限。

public class Rooted extends Activity {
    EditText body;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        body = (EditText)findViewById(R.id.bodyEditText);
        try {
        Process process = Runtime.getRuntime().exec("/system/bin/ping -c 1 betterpaving.com");
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        int i;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((i = reader.read(buffer)) > 0) output.append(buffer, 0, i);
        reader.close();
        body.append(output.toString()+"\n");
        } 
        catch (IOException e) {
            body.append("Error\n");
            e.printStackTrace();
            } 
        }//oncreate

    //TODO: Fill In Methods Etc.

    //"ping -c 1 betterpaving.com" try this sometime
}//class

它与你的不同,需要放在创建块之外的某个地方,但是...

答案 1 :(得分:1)

您的应用是否拥有互联网权限?设备是否连接到互联网? Logcat中有输出吗?

This question显示了一个可用于从Java ping的方法,无需运行shell命令。