UWP蓝牙查找设备需要很长时间

时间:2018-08-08 08:28:34

标签: bluetooth uwp windows-10-universal rfcomm

我正在尝试(像其他许多应用一样)制作一个应用程序,该应用程序最初应该能够检测所有可见的蓝牙(RFComm)设备(未配对和配对,已连接和未连接)并在屏幕上列出它们。 之后,它还可以与选定的设备配对。

我目前正试图了解蓝牙在Windows 10中的工作原理。我发现蓝牙设备被视为连接到PC的设备,例如键盘,鼠标,USB集线器等,如果我想查看蓝牙设备,最便捷的方法之一就是使用Deviceinformation.FindAllAsync()方法。

我使用了一些示例代码来查找设备,首先尝试是:

selector = BluetoothDevice.GetDeviceSelector();
        var devices = await DeviceInformation.FindAllAsync(selector);
        foreach (var device in devices)
        {
            var bluetoothDevice = await BluetoothDevice.FromIdAsync(device.Id);
            if (bluetoothDevice != null)
            {
                Debug.WriteLine(bluetoothDevice.BluetoothAddress);
            }
            Debug.WriteLine(device.Id);
            foreach (var property in device.Properties)
            {
                Debug.WriteLine("   " + property.Key + " " + property.Value);
            }
        }

此方法找不到与我的设备相邻的蓝牙设备。

如果我从以下位置更改第一行:

selector = BluetoothDevice.GetDeviceSelector();

像这样:

selector = BluetoothDevice.GetDeviceSelectorFromPairingState(false);

它最终能够找到所有可见的未配对设备,并且FindAllAsync花费高达30秒的时间才能找到所有这些设备。

这里出现一个问题:如何找到所有可见的设备,而不论它们的配对状态如何,以及如何将30秒的搜索时间缩短到更少?

最后,我必须找到1个特定的蓝牙2.0设备并连接到它。使用FindAllAsync找到它后该怎么办?

1 个答案:

答案 0 :(得分:0)

您应该创建FindAllAsync而不是DeviceWatcher,为其暴露的事件添加处理程序,然后调用Start()。这样不仅可以更快地获得一些初始结果,还可以让您对设备消失的情况做出反应。

FindAllAsync花了很长时间,因为它必须等待超时发生(指示周围不再有设备)并且不能返回任何部分结果。