【发布时间】:2018-11-28 18:28:45
【问题描述】:
我无法从根目录读取文件。 怎么做? 我使用命令阅读
Java.Lang.Process suProcess = Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });
但是我如何得到答案呢?
【问题讨论】:
标签: xamarin command root execute su
我无法从根目录读取文件。 怎么做? 我使用命令阅读
Java.Lang.Process suProcess = Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });
但是我如何得到答案呢?
【问题讨论】:
标签: xamarin command root execute su
Java.Lang.Process 类有一些有趣的Streams,您需要从中阅读。 InputStream 和 ErrorStream。
首先,创建流程后,您需要等待它。这可以通过.WaitForAsync() 很好地完成。这将允许您回答通常在请求 root 权限时出现的任何对话框等。
当.WaitForAsync() 返回时,它会给你一个退出代码。 0 表示一切顺利,任何其他退出代码都表示可能有错误。
在退出代码 0 的情况下,您可能可以从 InputStream 读取并得到您要查找的内容。
所以你的代码最终会看起来像:
async Task<string> GetVpnStatus()
{
var process = Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cat /data/misc/vpn/state" });
var exitCode = await process.WaitForAsync();
if (exitCode == 0)
{
using (var outputStreamReader = new StreamReader(process.InputStream))
return await outputStreamReader.ReadToEndAsync();
}
if (process.ErrorStream != null)
{
using (var errorStreamReader = new StreamReader(process.ErrorStream))
return await errorStreamReader.ReadToEndAsync();
}
return null;
}
这个结果看起来像
ppp0
10.0.0.42/32
0.0.0.0/0
105.112.3.1 123.234.12.55
【讨论】: