我想为root手机编写一个Android应用程序,其行为方式如下:
我想拥有一个root shell,我可以发出命令。所以我想要的是我的应用程序在启动时请求root shell,然后:
1)如果它获得shell(用户授予超级用户权限),应用程序应继续
2)如果它没有获得它(用户拒绝权限或超级用户请求弹出超时)应用程序应立即终止
现在,在SO上阅读另一个问题我发现你可以使用:
来请求root shellProcess p = Runtime.getRuntime().exec("su");
但是,无论您是否获得了许可,都会立即返回。您可以发出:
p.waitFor();
但是如果用户实际已经给予许可,它将永远不会返回,只有在权限被拒绝时才会返回。
我想要一个可靠的方法来获取su shell并保留它,并知道我是否真的获得了许可。有什么想法吗?
答案 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
}
您可能必须等待权限请求弹出窗口首先消失。在这种情况下,可能需要尝试输入/输出流的可用性。