C#使用ADB工具获取手台消息

来源:互联网 发布:淘宝子账号要下载什么 编辑:程序博客网 时间:2024/06/15 06:19

放最近项目中用到ADB工具,在C#程序中获取手台的LTE消息,并进行解析处理。下面说一下如何通过C#控制ADB工具,从手台获取LTE消息。

首先通过进程类Process设置进程信息,代码如下:


然后获取ADB进程

adb = processHelper.GetProcess(AppSettings.GetValue("adb_file"));adb.StartInfo.Arguments = "shell su \"cat /dev/ttyUSB-21\"; cat /dev/ttyUSB-21" ;
上述代码中adb_file是adb.exe文件的绝对路径。

获取进程后启动ADB进程并设置数据重定向点,开始异步读取

if (adb.Start()) {try {    adb.OutputDataReceived += OutputDataOnReceived;    adb.ErrorDataReceived += OutputErrorDataOnReceived;    adb.BeginOutputReadLine();} catch (Exception e) {    log.Error(e.Message);}}

然后在OutputDataOnReceived函数中接收并处理数据。


有几点需要注意:

1. 进入ADB shell之后就可以直接同手台进行互通,这里给手台发送消息的格式为 shell + 命令,比如查看当前目录的命令为:shell pwd;如果需要发送多条命令,则可以使用字符‘&’或者‘;’,比如查看当前目录并显示当前目录下的文件命令为:shell pwd & ls或者shell pwd; ls。有部分命令需要特殊权限,此时需要先获取命令权限,然后再执行,如上述例子中所示,命令为:shell su \"cat /dev/ttyUSB-21\"; cat /dev/ttyUSB-21

2. 我重定向了输入之后,使用adb.StandardInput.Write()命令无效,不了能写入命令,原因没有查清楚;如果遇到这种情况,请自行查阅,也烦请告知鄙人解决方法。

3. 使用异步读取时,不能与同步操作同时使用,原因见此

使用Process类控制进程的启动和结束,以及向启动的进程写入命令、参数或者从进程中读取输出操作,会时常出现这样那样的问题,有些问题是控制程序本身的问题,许多时候也跟我们要控制的进程有关,所以遇到的问题形形色色,有时候只能另辟他径。