执行Root命令并读取输出Xamarin

执行Root命令并读取输出Xamarin,xamarin,command,root,execute,su,Xamarin,Command,Root,Execute,Su,我无法从根目录读取文件。 怎么做? 我使用这个命令来阅读 Java.Lang.Process suProcess = Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" }); 但是我如何得到答案呢?Java.Lang.Process类有一些有趣的流,您需要从中阅读输入流和错误流 首先,在创建流程之后,您需要等待它。这可以通过.WaitForAsync()很好地完成

我无法从根目录读取文件。 怎么做? 我使用这个命令来阅读

Java.Lang.Process suProcess =  Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });

但是我如何得到答案呢?

Java.Lang.Process类有一些有趣的
流,您需要从中阅读<代码>输入流
错误流

首先,在创建流程之后,您需要等待它。这可以通过
.WaitForAsync()
很好地完成。这将允许您回答请求根权限时通常出现的任何对话框等

.WaitForAsync()
返回时,它会给您一个退出代码。0表示一切正常任何其他退出代码表示可能有错误

在退出代码为0的情况下,您可能可以从InputStream中读取并获取所需内容

因此,您的代码最终会看起来像:

异步任务GetVpnStatus() { var process=Java.Lang.Runtime.GetRuntime().Exec(新字符串[]{“su”、“-c”、“cat/data/misc/vpn/state”}); var exitCode=wait process.WaitForAsync(); if(exitCode==0) { 使用(var outputStreamReader=newstreamreader(process.InputStream)) 返回等待输出StreamReader.ReadToEndAsync(); } if(process.ErrorStream!=null) { 使用(var errorStreamReader=newstreamreader(process.ErrorStream)) 返回wait await errorStreamReader.ReadToEndAsync(); } 返回null; } 其结果将类似于

ppp0
10.0.0.42/32
0.0.0.0/0
105.112.3.1 123.234.12.55