Я использую команду RunAndroidCmd в моей программе (Delphi Rio) на моем Android устройстве.
Она работает, но только один раз.
RunAndroidCmd('su root'+sLineBreak+'sh -c ''echo "18" >
/sys/class/a1/export'''+sLineBreak + 'echo 0 > /sys/class/a1/value'
,true);
, если я использую ее в секунду раз он не дает результата.
RunAndroidCmd('echo 1 > /sys/class/a1/value',true);
Я думаю, что мне нужно проверить процесс и дождаться ответа, прежде чем делать вторую команду, но я не знаю, как это сделать.
Я также попробовал этот код:
procedure Execute(sCmd: string; sOut : TStringList);
var Process : JProcess;
Runtime : JRuntime;
Input : JInputStream;
x, bufflen: Integer;
s: string;
buff : TJavaArray<Byte>;
begin
Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd));
Process.waitFor;
Input := Process.getInputStream;
bufflen := Input.available;
buff := TJavaArray<Byte>.Create(bufflen);
Input.read(buff);
s := '';
for x := 0 to bufflen - 1 do
s := s + chr(buff[x]);
sOut.Add(s);
end;
, но получил ошибку: Project .apk поднял класс исключений Ошибка сегментации (11)
Только этот код:
Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd));
Process.waitFor;
тоже не работает.