Android: как запустить команду оболочки из кода - PullRequest
4 голосов
/ 16 июня 2010

Я пытаюсь выполнить команду из моего кода, команда "echo 125> /sys/devices/platform/flashlight.0/leds/flashlight/brightness" и я могу без проблем запустить его из оболочки adb

Я использую класс Runtime для его выполнения:

Runtime.getRuntime().exec("echo 125 > /sys/devices/platform/flashlight.0/leds/flashlight/brightness");

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

Кто-нибудь знает обходной путь для этого?

Ответы [ 6 ]

12 голосов
/ 16 июня 2010

Телефон должен быть рутирован, после этого вы можете сделать что-то вроде:

public static void doCmds(List<String> cmds) throws Exception {
    Process process = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(process.getOutputStream());

    for (String tmpCmd : cmds) {
            os.writeBytes(tmpCmd+"\n");
    }

    os.writeBytes("exit\n");
    os.flush();
    os.close();

    process.waitFor();
}    
2 голосов
/ 16 июня 2010

Согласен, вам, вероятно, нужно рутировать телефон для записи в системные файлы.Я удивлен, что яркость не выставляется через SDK.

Для получения подробной информации о запуске команд оболочки из кода, проверьте этот проект:

1 голос
/ 17 сентября 2012

Вы также можете использовать remout / system с правами на запись ..

1 голос
/ 18 мая 2012

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

НО, когда вы вызываете Runtime.getRuntime (). Exec, у вас нет тех же прав доступа. некоторые команды оболочки даже не доступны из exec.

так что вам нужно не только рутованное устройство, но и su premisions.

1 голос
/ 16 июня 2010

Если вы просто пытаетесь установить яркость, почему бы вам не сделать это через предоставленный API (AKA, есть ли причина, по которой вы пытаетесь сделать так, как вы). 1003 *

int brightness = 125; 
Settings.System.putInt(
      ftaContext.getContentResolver(), 
      Settings.System.SCREEN_BRIGHTNESS, 
      brightness); 
0 голосов
/ 16 июня 2010

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

...