2011-10-03 67 views
0

我的应用程序请求SU访问是这样的:如何在请求后等待SU访问?

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

,提示用户允许或拒绝访问,但我的应用程序将继续在显示屏幕上选择要执行的下一行代码。如何让应用程序等待,直到用户在提示符下做出选择?

+0

咦?在Android上? –

+0

为什么?有没有更好的办法? –

回答

2

只是为了这一点,我认为它会工作:

Process p = Runtime.exec("foo"); 
int exitCode = p.waitFor(); 

它会等待你的进程结束,而你也将得到退出代码。

+0

谢谢,但这使得应用程序挂起,因为即使用户选择允许或拒绝SU访问,应用程序就坐在那里等待。 –

+0

这不应该这样做,你在UI线程上运行这个吗? – jDourlens

+0

是的。这是一个非常简单的应用程序,因此它应该在单个线程上运行。 –

0

与@jdourlens ans类似,您可以尝试在实际的“su”呼叫之前添加此代码。

try 
{ 
    Process p2 = Runtime.getRuntime().exec("su -c ls"); 
    int exitCode = p2.waitFor(); 
} 
catch(Exception e2) 
{//do something} 

因此,如果用户选择“始终允许”选项,事情就会解决。 我也在尝试阅读Ch​​ainfires的图书馆以及他的网站:https://github.com/Chainfire/libsuperuser/blob/master/libsuperuser/src/eu/chainfire/libsuperuser/Shell.java

我能想出的是在用户授予超级用户访问权限的情况下执行阻止I/O调用。一个好办法是写一个临时文件,或者做一些随机命令。 这是我试图做的。用su调用ls,它将授予su进程的访问权限,然后你的下一个su调用将具有适当的访问权限。