我的應用程序請求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上? –
爲什麼?有沒有更好的辦法? –