Я только что начал проект, который потребует от меня подключения планшета Windows 10 с другим устройством Bluetooth.Bluetooth Pairing (SSP) в Windows 10 с 32feet.NET
Я решил начать с простого приложения Windows Forms, чтобы ознакомиться с процессом. Я добавил пакет 32feet.NET NuGet к моему решению и быстро добился успеха в поиске устройств и заполнении списка.
client = new BluetoothClient();
devices = client.DiscoverDevices();
if (devices.Length > 0)
{
foreach (var device in devices)
{
lstBTDevices.Items.Add(device.DeviceName);
}
}
else
{
MessageBox.Show("Unable to detect any bluetooth devices");
}
Затем я добавил обработчик событий, чтобы я мог выбрать обнаруженное устройство и попытаться выполнить сопряжение с ним.
private void LstBTDevices_SelectedIndexChanged(object sender, EventArgs e)
{
BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex];
if (MessageBox.Show(String.Format("Would you like to attempt to pair with {0}?", selectedDevice.DeviceName), "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (BluetoothSecurity.PairRequest(selectedDevice.DeviceAddress, "123456"))
{
MessageBox.Show("We paired!");
}
else
{
MessageBox.Show("Failed to pair!");
}
}
}
На моем Windows7 настольного ПК с дешевым адаптером Bluetooth 2.0 это вызывает всплывающее окно, чтобы появиться на моем телефоне запрашивающим я ввожу пин-код. Когда я вхожу в «123456», спаривание выполняется успешно.
Однако здесь проблема начинается. Затем я беру свое приложение и запускаю его на своем планшете Windows 10, и теперь, когда я выбираю свой телефон, он вызывает всплывающее окно на моем телефоне со случайным 6-разрядным пинкодом и сообщение о том, что оно должно соответствовать тому, что отображается на экране планшета , с кнопками pair/cancel в качестве параметров. При нажатии любой из этих кнопок происходит сбой.
Это что-то я делаю неправильно? Драйвер не поддерживается 32feet.NET?
Любой совет будет очень благодарен.
UPDATE: Комментарий от bare_metal помог мне получить немного дальше
Я добавил обработчик события BluetoothWin32Authentication и добавил кнопку, чтобы инициировать сопряжение SSP:
EventHandler<BluetoothWin32AuthenticationEventArgs> authHandler = new EventHandler<BluetoothWin32AuthenticationEventArgs>(handleAuthRequests);
BluetoothWin32Authentication authenticator = new BluetoothWin32Authentication(authHandler);
private void btnPairSSP_Click(object sender, EventArgs e)
{
BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex];
if (MessageBox.Show(String.Format("Would you like to attempt to pair with {0}?", selectedDevice.DeviceName), "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Task t = new Task(PairBluetoothTask);
t.Start();
}
}
private void PairBluetoothTask()
{
BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex];
if (BluetoothSecurity.PairRequest(selectedDevice.DeviceAddress, null))
{
MessageBox.Show("We paired!");
}
else
{
MessageBox.Show("Failed to pair!");
}
}
private void handleAuthRequests(object sender, BluetoothWin32AuthenticationEventArgs e)
{
switch (e.AuthenticationMethod)
{
case BluetoothAuthenticationMethod.Legacy:
MessageBox.Show("Legacy Authentication");
break;
case BluetoothAuthenticationMethod.OutOfBand:
MessageBox.Show("Out of Band Authentication");
break;
case BluetoothAuthenticationMethod.NumericComparison:
if(e.JustWorksNumericComparison == true)
{
MessageBox.Show("Just Works Numeric Comparison");
}
else
{
MessageBox.Show("Show User Numeric Comparison");
if (MessageBox.Show(e.NumberOrPasskeyAsString, "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
e.Confirm = true;
}
else
{
e.Confirm = false;
}
}
break;
case BluetoothAuthenticationMethod.PasskeyNotification:
MessageBox.Show("Passkey Notification");
break;
case BluetoothAuthenticationMethod.Passkey:
MessageBox.Show("Passkey");
break;
default:
MessageBox.Show("Event handled in some unknown way");
break;
}
}
Когда я начать спаривание с моего телефона это прекрасно работает, событие срабатывает, всплывающие окна сообщений и спаривание успешны.
Однако, когда я начинаю спаривание с планшета, обработчик события никогда не запускается, поэтому спаривание не выполняется.
Первое спаривание с Pincode называется наследием спаривание и один со случайным 6 цифр Безопасен Простое сопряжение. в SSP для аутентификации инициатора и ответчика кнопка «пар/прием» должна быть нажата с обеих сторон. вы видите кнопку accept/reject в Windows10? , если вы так согласились с обоими устройствами? Сколько времени потребуется, чтобы заметить спаривание (20s)? –
Нет, я не вижу вариант accept/reject или pincode на планшете Windows10. Попытайтесь изменить подход и посмотрите на пространство имен Windows.Devices.Bluetooth, а не на 32feet.NET. –
У меня тоже такая же проблема, любая помощь! –