【问题标题】:How to know when Android device is plugged into USB port? [closed]如何知道 Android 设备何时插入 USB 端口? [关闭]
【发布时间】:2014-01-19 20:40:08
【问题描述】:

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

【问题讨论】:

  • @beworker 答案如何?我的问题是关于 C#、.NET Framework - 而不是 Java。您显然没有阅读该问题或其标题或答案。这不是答案。
  • @Tommy 这听起来很奇怪,但看看 IKVM。它允许您通过 C# 运行 Java 代码。您或许可以为此利用现有的 Java 库。
  • 谢谢@ashes,我一定会调查的。
  • 你的问题一点都不清楚。您在评论中说您的问题是关于 C#,但您没有在问题中提及它。你在使用 Xamarin 吗?还是您正在编写的 C# PC 应用程序?缺乏信息和细节。请使用编辑链接按钮并添加任何相关内容。

标签: c# android .net wpf winforms


【解决方案1】:

我不清楚问题,您是否必须检测每台 Android 设备,还是只想检测您的私人设备?

虽然,这可能不是您要搜索的内容,但您可以尝试的最简单方法是在 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 才能检测到它。

【讨论】:

  • 一个警告:这需要adb 在路径上。这可能并不总是正确的。
  • 感谢您指出这一点,已更正。 :)
  • 谢谢@MrCiastexx 这已经绰绰有余了:-) 假设我可以使用if(e.Data.ToString().Contains("android")) { // An android device is connected. Do something. } 之类的东西来代替“解析”是否安全?如果我不能,那很酷,只是我不介意连接了哪种Android设备:)
  • @Tommy 这可能会奏效。最好的办法就是试一试看看。我相信您可以使用几台 Android 设备进行测试。
  • @Tommy 这会起作用,但并非总是如此,例如,我的 Android 设备的 ADB 输出是 MedfieldXXXXXXXX device。您应该从关键字device 的第二行开始解析每一行。这将确保您连接了正确的 Android 设备。
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多