我有非常简单的代码如下:
@Override
public void onClick(View v)
{
Log.i("MyApp", "Started");
try
{
Process processStart = Runtime.getRuntime().exec("su");
}
catch (IOException e1)
{
e1.printStackTrace();
}
String myStringArray[]= {"getevent","/dev/input/event0"};
String line;
try
{
Process process = Runtime.getRuntime().exec(myStringArray);
InputStreamReader inputstreamreader = new InputStreamReader(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputstreamreader);
bufferedReader.read();
while ((line = bufferedReader.readLine()) != null)
{
Log.i("MyApp", line);
}
InputStreamReader errstreamreader = new InputStreamReader(process.getErrorStream());
BufferedReader errReader = new BufferedReader(errstreamreader);
errReader.read();
while ((line = errReader.readLine()) != null)
{
Log.i("MyApp", line);
}
} catch(java.io.IOException e){
}
Log.i("MyApp", "Finished");
}
});
但我收到此错误:
could not open /dev/input/event0, permission denied
我被要求在手机上授予 root 权限,但在此之前它在 logcat 上出现错误。
我也尝试过 processStart.waitFor();
但它把应用程序挂在那里,根本没有前进。我尝试到处寻找原因,但无法使其发挥作用。
我也尝试过 ProcessBuilder 但当我使用时 getevent 根本不返回任何内容......
我认为您误解了“su”的用法。
Process processStart = Runtime.getRuntime().exec("su");
上面的代码将创建一个新进程并执行“su”命令,这只会使子进程成为“root”。
您的调用过程仍然是正常过程,因此您无法执行“getevent”。相反,您应该在“有根子进程”中运行此超级命令,例如:
mProcess = new ProcessBuilder()
.command("/system/xbin/su")
.redirectErrorStream(true).start();
OutputStream out = mProcess.getOutputStream();
String cmd = "getevent /dev/input/event0 \n";
Log.d(TAG, "Native command = " + cmd);
out.write(cmd.getBytes());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)