0

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

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

现在,在这里阅读另一个问题,我发现您可以使用以下命令请求 root shell:

Process p = Runtime.getRuntime().exec("su");

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

p.waitFor();

但是,如果用户实际上已授予权限,这将永远不会返回,只有在权限被拒绝时才会返回。

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

4

1 回答 1

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
}

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

于 2013-05-17T10:10:35.340 回答