应用启动时请求root shell

时间:2013-05-17 09:55:34

标签: android root

我想为root手机编写一个Android应用程序,其行为方式如下:

我想拥有一个root shell,我可以发出命令。所以我想要的是我的应用程序在启动时请求root shell,然后:
1)如果它获得shell(用户授予超级用户权限),应用程序应继续
2)如果它没有获得它(用户拒绝权限或超级用户请求弹出超时)应用程序应立即终止

现在,在SO上阅读另一个问题我发现你可以使用:

来请求root shell
Process p = Runtime.getRuntime().exec("su");

但是,无论您是否获得了许可,都会立即返回。您可以发出:

p.waitFor();

但是如果用户实际已经给予许可,它将永远不会返回,只有在权限被拒绝时才会返回。

我想要一个可靠的方法来获取su shell并保留它,并知道我是否真的获得了许可。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你可以致电exitValue()

如果进程仍在运行,它将抛出异常,如果权限被拒绝,则可能为1(至少为0)(因为命令将失败)。

int result = 0;
try {
    result = p.exitValue();
} catch (IllegalThreadStateException e) {
    e.printStackTrace();
}
if (result == 0) {
    // Your process p is root and running
} else {
    // su failed
}

您可能必须等待权限请求弹出窗口首先消失。在这种情况下,可能需要尝试输入/输出流的可用性。