#c# #uwp #bluetooth
#c# #uwp #bluetooth
Вопрос:
Я использую следующий код для идентификации моего устройства:
string[] properties = new string[] {
"System.Devices.Aep.DeviceAddress",
"System.DeviceInterface.Bluetooth.VendorId",
"System.DeviceInterface.Bluetooth.ProductId"
};
var selector = BluetoothDevice.GetDeviceSelectorFromPairingState(false);
var devices = await DeviceInformation.FindAllAsync(selector, properties);
if (devices[0].Properties.TryGetValue(properties[1], out object vendorIdValue))
{
vendorId = (ushort?)vendorIdValue ?? (ushort)0;
}
if (devices[0].Properties.TryGetValue(properties[2], out object productIdValue))
{
productId = (ushort?)productIdValue ?? (ushort)0;
}
Однако, когда устройство непарное, идентификаторы поставщика и продукта всегда равны нулю (0). Когда устройство сопряжено, я могу читать VId и PId. Как я могу получить эти свойства для несвязанного устройства?
Комментарии:
1. Попробуйте true вместо false : learn.microsoft.com/en-us/uwp/api /…
2. @jdweng но я хочу, чтобы это было false, поскольку я хочу перечислить несвязанные устройства.
3. В ваших свойствах вам нужен адрес при поиске? Свойства — это фильтр поиска, и вы хотите найти адрес, а не использовать адрес в поиске.
4. Мне не нужен адрес. В каком смысле это фильтр поиска? Поскольку на основе этого адреса ничего не фильтруется, я просто использую это свойство для последующего создания
BluetoothDevice
(если pid и vid совпадают).
Ответ №1:
Когда устройство не сопряжено, будет раскрыта некоторая информация (конечная точка), например идентификатор или имя устройства, но эта часть информации не содержит vid и pid, которые вам нужны. Эта информация будет раскрыта после сопряжения.
Вы можете выполнить тест, выполнить сопряжение с определенным устройством, а затем отменить сопряжение, вы можете обнаружить, что до тех пор, пока устройство было сопряжено, даже если сопряжение отменено, вы все равно можете получить vid и pid. Но после перезагрузки устройства vid и pid устройства больше не будут получены.
Комментарии:
1. Но это не имеет смысла, поскольку SDP предназначен для проверки, то ли это устройство, которое я ищу. В моем приложении я хочу предложить пользователю выполнить сопряжение с моим устройством, а не предлагать ему выполнить сопряжение со всеми близлежащими устройствами, чтобы проверить, являются ли они моим устройством. Этот дизайн бессмыслен, также другие платформы не имеют таких ограничений. Даже сам UWP раскрывает PID и VID для несвязанных устройств BLE, но не для BT Classic.