Я пробовал много вещей, но я все еще не могу найти правильный способ проверить, имеет ли мое приложение root-доступ. Вот что я пробовал:
private boolean isRootGranted() {
Process p;
BufferedReader reader = null;
String line;
try {
p = Runtime.getRuntime().exec("su");
reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while( (line = reader.readLine()) != null) {
System.out.println(line);
}
int result;
try {
result = p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
Toast.makeText(this, "You need to grant root access", Toast.LENGTH_SHORT).show();
return false;
}
if(result != 0) {
Toast.makeText(this, "You need to grant root access", Toast.LENGTH_SHORT).show();
return false;
}
return true;
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Your device is not rooted", Toast.LENGTH_SHORT).show();
return false;
} finally {
try {
if(reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Приведенный выше код работает отлично, если на устройстве нет рута или в корне отказано. Однако каждый раз, когда рут предоставляется, он застревает в цикле while. Если я уберу цикл while, он застрянет на p.waitFor()
РЕДАКТИРОВАТЬ Я обнаружил, что команда su
не производит никакого вывода. Но я не знаю, почему он все еще зависает в waitFor (), если ничего не выводится / выдает ошибку.