我的应用程序请求 SU 访问如下内容:
Process p = null;
p = Runtime.getRuntime().exec("su");
这会提示用户允许或拒绝访问,但我的应用程序会在屏幕上显示选择时继续执行下一行代码。如何让应用程序等到用户在提示符下做出选择?
就这一点而言,我认为它会起作用:
Process p = Runtime.exec("foo");
int exitCode = p.waitFor();
它将等待您的流程结束,您还将获得退出代码。
类似于@jdourlens ans,您可以尝试在实际的“su”调用之前添加此代码。
try
{
Process p2 = Runtime.getRuntime().exec("su -c ls");
int exitCode = p2.waitFor();
}
catch(Exception e2)
{//do something}
因此,如果用户选择“始终允许”选项,事情就会解决。我还试图阅读代码 Chainfires 的库以及他的网站:https ://github.com/Chainfire/libsuperuser/blob/master/libsuperuser/src/eu/chainfire/libsuperuser/Shell.java
我能想到的是在用户授予超级用户访问权限时进行阻塞 I/O 调用。一个好方法是写一个临时文件,或者做一些随机命令。这就是我试图做的。使用 su 调用 ls,这将授予该进程 su 访问权限,然后您的下一个 su 调用将具有适当的访问权限。