c# - 如何知道 Android 设备何时插入 USB 端口?

标签 c# android .net wpf winforms

<分区>

如何判断 Android 设备是否已插入 USB 端口?我看过许多代码示例,它们可以检测何时插入了任何 USB 设备,但我无法使用它。我需要能够检测到 Android 设备。

最佳答案

我不太清楚这个问题,您是必须检测每台 Android 设备,还是只想检测您的私有(private)设备?

尽管这可能不是您要搜索的内容,但您可以尝试的最简单方法是在 USB 设备连接事件上调用命令 adb devices 并解析输出。我现在不能给出太多代码,因为我的时间有限,但是看看 WinUSB C#

您可以启动进程并解析其输出。

System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
psi.FileName = @"C:\Windows\System32\cmd.exe";
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;

System.Diagnostics.Process p = new Process();
p.StartInfo = psi;
p.OutputDataReceived += p_DataReceived;
p.EnableRaisingEvents = true;
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();

p.StandardInput.WriteLine("adb devices");
p.StandardInput.WriteLine("exit");
p.WaitForExit();

static void p_DataReceived(object sender, DataReceivedEventArgs e)
{
// Manipulate received data here
        Console.WriteLine(e.Data);
// if no devices, then there will be only "List of devices attached: "
}

再次声明,这只是一个快速示例,应该有更好的解决方案。您可以在连接时检查设备 ID,但这会带来另一个问题 - 如何知道此 ID 是 Android 设备的 ID?

编辑:您还必须将 ADB 可执行文件添加到您的 PATH 环境变量中。

EDIT2:如果您不想依赖 PATH,您可以为您的应用程序提供 ADB 并从应用程序的目录运行它,使用 Application.StartupPath 获取它

EDIT3:另一个缺点是您必须先在 Android 设备中启用 USB 调试,然后 ADB 才能检测到它。

关于c# - 如何知道 Android 设备何时插入 USB 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222343/

相关文章:

android - 如何从 Android 手机获取 GPS 数据?

.net - 不用打印机打印?

c# - 带有存储过程和用户​​定义表类型参数的 LINQ to SQL

c# - WCF - 套接字连接已中止

c# - 使用 Linq 将对象列表分组为新的对象列表分组列表

.net - 使用 Exchange Web 服务 (EWS) 托管 API 为其他用户创建任务

.net - 由于以下错误 : 80040154,检索 CLSID {XXXX} 组件的 COM 类工厂失败

c# - 是否有可能劫持标准输出

android - 带视频的 Cordova 插件相机媒体类型无法正常工作

java - 应用程序读取错误短信