Как я могу ждать доступа SU после запроса? - PullRequest
0 голосов
/ 03 октября 2011

Мое приложение запрашивает у SU доступ примерно так:

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

Это предлагает пользователю разрешить или запретить доступ, но мое приложение продолжает выполнять следующую строку кода, пока выбор отображается на экране. Как я могу заставить приложение ждать, пока пользователь не сделает выбор в ответ на запрос?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Только для этого, я думаю, это будет работать:

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

оно будет ждать окончания вашего процесса, и вы также получите код выхода.

0 голосов
/ 02 апреля 2014

Как и в случае @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

Что я мог выяснить, так это сделать блокирующий вызов ввода-вывода, пока пользователь предоставляет доступ суперпользователя. Хороший способ - написать временный файл или выполнить несколько случайных команд. Это то, что я пытался сделать. Позвоните в ls с помощью su, который предоставит этому процессу доступ su, а затем ваш следующий вызов su будет иметь соответствующий доступ.

...