Question isn't clear to me, do you have to detect every Android device, or you want to detect just your private device?
Though, this may not be what are you searching for, but the easiest approach you could try would be to invoke command adb devices on USB device connection event and parse the output. I can't give much code right now, because of limited time I have, but take a look at
WinUSB C#
You can start process and parse its output.
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: "
}
Once again, it's only a fast example and there should be a better solution for it. You could check Device ID upon connection, but it makes another problem - how to know that this ID is ID of an Android device?
EDIT: You also have to add ADB executable to your PATH environmental variable.
EDIT2: If you don't want to rely on PATH, you could provide ADB with your application and run it from app's directory, getting it with Application.StartupPath
EDIT3: Another drawback is that you have to enable USB Debugging in your Android device before ADB can detect it.