Выполнение команд внутри моего приложения - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь выполнить команды из моего приложения для Android, чтобы настроить некоторые аспекты моего устройства с помощью кода.Например, я пытаюсь заблокировать свое устройство с помощью этого кода (из класса, который расширяет класс MainActivity):

Process p=Runtime.getRuntime().exec("su");
DataOutputStream dos = new DataOutputStream(p.getOutputStream());
dos.writeBytes("adb shell input keyevent 26");
dos.writeBytes("exit\n");
dos.flush();
dos.close();
p.waitFor();

Когда я запускаю его, я получаю:

java.io.Exception: Error running exec(). Command: [su] Working directory: null Environment: null

Мое устройство не рутировано.Я пробовал другие способы сделать это, но безуспешно.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я несколько раз получал ошибку нулевого рабочего каталога, и это всегда было проблемой с моей командой.Попробуйте это:

Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "input keyevent 26"});
proc.waitFor();

Это должно как минимум устранить ошибку 'null Environment'.

0 голосов
/ 21 мая 2018

Я не думаю, что вы можете сделать это без рутирования вашего приложения.Итак, попробуйте сделать это на рутованном устройстве.

После рутирования вы можете попробовать проверить права доступа root и затем выполнить эти задачи.

Чтобы проверить права доступа root, как указано здесь :

 public boolean isRooted() {
    // get from build info
    String buildTags = android.os.Build.TAGS;
    if (buildTags != null && buildTags.contains("test-keys")) {
        return true;
    }
    // check if /system/app/Superuser.apk is present
    try {
        File file = new File("/system/app/Superuser.apk");
        if (file.exists()) {
            return true;
        }
    } catch (Exception exception) {
        // ignore
        exception.printStackTrace();
    }
    String[] commands = {
            "/system/xbin/which su",
            "/system/bin/which su",
            "which su"
    };
    for (String command : commands) {
        try {
            Runtime.getRuntime().exec(command);
            return true;
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    Log.d("message-startUp: ", "RootUtil");
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...