为了方面广大程序员,我还是决定将改bug写在我的博客上。
在网上查找到的关于Runtime.getRuntime().exec执行命令的方法首先出现的的是这个:
try
{
Process process = Runtime.getRuntime().exec("su");
inputStream = new DataInputStream(process.getInputStream());
outputStream = new DataOutputStream(process.getOutputStream());
errinputStream = new DataInputStream(process.getErrorStream());
process.getErrorStream();
outputStream.writeBytes(cmd);
outputStream.writeBytes(shellCmd);
//outputStream.writeBytes("ls");
outputStream.flush();
String temp = "";
while((temp = inputStream.readLine())!=null)
{
name= name+temp;
Log.i("tyty", "name:"+name);
}
process.waitFor();
Log.i("tyty", "name:---------");
int result = process.exitValue();
Log.i("tyty", "result"+result);
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
inputStream.close();
outputStream.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是这个程序在我的测试机:电信版的m3 上,会没有执行结果,进程会一直在挂起,一直等待而没有结果。不废话直接上解决方法:
将
outputStream.close();
<span style="white-space:pre"> </span>这行代码提前到 <pre name="code" class="java">process.waitFor();
执行,就能看到inputStream里面有数据了。
demo的sdk版本是4.0. 如果大神能解释为什么这样,希望能留言,让小弟膜拜!