Как проверить, предоставило ли мое приложение root-доступ? - PullRequest
0 голосов
/ 01 июня 2019

Я пробовал много вещей, но я все еще не могу найти правильный способ проверить, имеет ли мое приложение 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 (), если ничего не выводится / выдает ошибку.

1 Ответ

0 голосов
/ 02 июня 2019

Наконец-то нашел блестящий ответ из этой темы, https://stackoverflow.com/a/39420232/11488790

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

...