服饰工厂网站建设/百度指数怎么用
最近的工作是Android驱动开发,时常需要使用adb shell命令来查询节点下面的很多信息
首先所有的adb shell命令是以ArrayList的格式传入的,查询的结果也是以ArrayList的形式扔出去的
其次C#实际上是调用本地系统应用实现的adb shell命令的执行,所以我们最好的是使用process这个类来实现
最后确保的是adb工具在C:\Windows目录下面
// new process对象System.Diagnostics.Process p = new System.Diagnostics.Process();// 设置属性p.StartInfo.UseShellExecute = false;p.StartInfo.CreateNoWindow = true;p.StartInfo.FileName = "cmd.exe";p.StartInfo.RedirectStandardError = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;String command = string.Empty;
// 同时执行多条adb shell命令for (int i = 0; i < commad_array.Count; i++) {if (i == commad_array.Count - 1) {command += "adb shell " + commad_array[i];} else {command += "adb shell " + commad_array[i] + "&";} }p.StartInfo.Arguments = "/c " + command;// 开启process线程p.Start();// 获取返回结果,这个是最简单的字符串的形式返回,现在试试以其他的形式去读取返回值的结果。string str = string.Empty;StreamReader readerout = p.StandardOutput;string line = string.Empty;while (!readerout.EndOfStream) {line = readerout.ReadLine();//Console.WriteLine(line);//将得到的结果写入到excle中excut_result.Add(line);}p.WaitForExit();p.Close();return excut_result;}
前提是手机必须连接,当手机未连接的时候,查询不到结果值,可以以此条件来判断手机是否连接,在p.Start()这个函数的地方最好加上try catch来捕捉异常
简单的demo程序如下所示:
System.Diagnostics.Process p = new System.Diagnostics.Process();p.StartInfo.UseShellExecute = false;p.StartInfo.CreateNoWindow = true;p.StartInfo.FileName = "cmd.exe";p.StartInfo.Arguments = "/c adb shell cat /proc/gesture_state";p.StartInfo.RedirectStandardError = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.Start();string outtr = p.StandardOutput.ReadToEnd();MessageBox.Show(outtr);p.Close();主要使用的还是一个Process的一个来实现的。