我的应用程序请求SU访问是这样的:如何在请求后等待SU访问?
Process p = null;
p = Runtime.getRuntime().exec("su");
,提示用户允许或拒绝访问,但我的应用程序将继续在显示屏幕上选择要执行的下一行代码。如何让应用程序等待,直到用户在提示符下做出选择?
我的应用程序请求SU访问是这样的:如何在请求后等待SU访问?
Process p = null;
p = Runtime.getRuntime().exec("su");
,提示用户允许或拒绝访问,但我的应用程序将继续在显示屏幕上选择要执行的下一行代码。如何让应用程序等待,直到用户在提示符下做出选择?
只是为了这一点,我认为它会工作:
Process p = Runtime.exec("foo");
int exitCode = p.waitFor();
它会等待你的进程结束,而你也将得到退出代码。
谢谢,但这使得应用程序挂起,因为即使用户选择允许或拒绝SU访问,应用程序就坐在那里等待。 –
这不应该这样做,你在UI线程上运行这个吗? – jDourlens
是的。这是一个非常简单的应用程序,因此它应该在单个线程上运行。 –
与@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调用将具有适当的访问权限。
咦?在Android上? –
为什么?有没有更好的办法? –