Delphi 10 - 在Android上执行命令行并获得实时输出

时间:2016-07-16 01:55:05

标签: android delphi

我正在尝试在Android上使用Delphi 10执行命令行并获取命令的输出。

我正在使用此处的文件:

https://github.com/FMXExpress/android-object-pascal-wrapper/tree/master/android-23

这是我的代码:

uses Classes,
     Androidapi.Helpers,
     java.lang.Process, java.lang.Runtime,
     java.io.OutputStream, java.io.InputStream,
     java.io.InputStreamReader, java.io.BufferedReader;

procedure Execute(sCmd: string; sOut : TStringList);
var Process : JProcess;
    Runtime : JRuntime;
    Input   : JInputStream;
    BuffInput : JBufferedReader;  
begin

    Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd));
    //Input := JInputStream(Process.getInputStream);
    BuffInput := JBufferedReader(jInputStreamReader(Process.getInputStream) );
while (s  = '') do
begin
    s := JStringToString(BuffInput.readLine);
    sOut.Add(s);
 end;

 //--- Compile but get Segmentation fault(11) at 
 // s := JStringToString(BuffInput.readLine);

end;

1 个答案:

答案 0 :(得分:1)

感谢Ken White的好评,我更多地讨论了这个问题。

1:我需要使用Androidapi.JNI.JavaTypes而不是java.io.InputStream - >如果我使用java.io.InputStream

,则Input.available总是0

2:执行命令后,我需要执行Process.waitFor。我是客人,我不能像旧的dos那样有实时输出

3:如果有人知道更好的方法,欢迎您:P

const string pi = "pi";
var input = "7pi";
var containsPi = (input.IndexOf(pi) > -1)
var inputDecimal = Convert.ToDecimal(input.Replace(input, pi, ""));
if (containsPi ) inputDecimal = inputDecimal * Math.Pi;
var resultInDegreees = inputDecimal * 180.0 / Math.Pi;