2011-10-03 34 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調用將具有適當的訪問權限。