Как и в случае @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 будет иметь соответствующий доступ.