我找到了源代码,它提供了从应用程序运行shell命令的机会,并且,据我所知,返回一个包含已执行命令结果的字符串:
我尝试执行“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);
问题出在哪里?
答案 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命令。