root用户手机上的getevent权限被拒绝

Suj*_*del 2 android

我的代码非常简单如下:

@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");
}
});
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

could not open /dev/input/event0, permission denied
Run Code Online (Sandbox Code Playgroud)

我被要求在手机上授予root权限,但在此之前它在logcat上有错误.

我也尝试过processStart.waitFor();

但它挂起了那里的应用程序,并没有向前发展.我试过看到各处的原因,但无法让这个工作.

我也尝试使用ProcessBuilder,但是当我使用它时,getevent根本没有返回任何内容......

Rob*_*bin 6

我想你误解了'su'的用法.

Process processStart = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)

上面的代码将创建一个新进程并执行'su'命令,该命令只会使子进程成为'root'.

你的通话过程仍然是一个正常的过程,所以你不能做'getevent'.相反,你应该在你的'rooted子进程'中运行这个超级命令,如:

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());
Run Code Online (Sandbox Code Playgroud)