在Windows10 UWP中查找蓝牙Mac地址而不进行配对

时间:2015-12-27 11:48:59

标签: c# bluetooth windows-10

我试图在Windows 10 IoT上编写一个读取所有MAC地址的应用程序。这些代码行返回所有配对设备,即使它们没有打开。

var selector = BluetoothDevice.GetDeviceSelector();
var devices = await DeviceInformation.FindAllAsync(selector);
listBox.Items.Add(devices.Count);
foreach (var device in devices)
{
    listBox.Items.Add(device.Id);
}

我也找到了这行代码

await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

这返回null。有没有办法扫描Windows 10通用应用程序中的所有MAC地址?

3 个答案:

答案 0 :(得分:2)

使用BluetoothLEAdvertisementWatcher扫描所有蓝牙LE设备的新方法。 这是我在项目中使用的一段代码:

var advertisementWatcher = new BluetoothLEAdvertisementWatcher()
{
    SignalStrengthFilter.InRangeThresholdInDBm = -100,
    SignalStrengthFilter.OutOfRangeThresholdInDBm = -102,
    SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000)
};

advertisementWatcher.Received += AdvertisementWatcher_Received;
advertisementWatcher.Stopped += AdvertisementWatcher_Stopped;

advertisementWatcher.Start();

以后

advertisementWatcher.Stop();

advertisementWatcher.Received -= AdvertisementWatcher_Received;
advertisementWatcher.Stopped -= AdvertisementWatcher_Stopped;

答案 1 :(得分:1)

您非常接近找到问题的答案。您可以尝试从DeviceId属性获取BluetoothDevice实例。然后,您将能够获得所有特定的蓝牙信息,包括蓝牙地址

var 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);
    }
}

答案 2 :(得分:1)

    private void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
    {
        //MessAgeChanged(MsgType.NotifyTxt, "FR_NAME:"+ eventArgs.Advertisement.LocalName + "BT_ADDR: " + eventArgs.BluetoothAddress);
        string sDevicename = setup.Default.BLEName.Text;
        BluetoothLEDevice.FromBluetoothAddressAsync(eventArgs.BluetoothAddress).Completed = async (asyncInfo, asyncStatus) =>
        {
            if (asyncStatus == AsyncStatus.Completed)
            {
                if (asyncInfo.GetResults() == null)
                {
                    if (!FailMsg)
                    {
                        MessAgeChanged(MsgType.NotifyTxt, "None");
                    }
                }
                else
                {
                    BluetoothLEDevice currentDevice = asyncInfo.GetResults();

                    Boolean contain = false;
                    foreach (BluetoothLEDevice device in DeviceList.ToArray())/
                    {
                        if (device.DeviceId == currentDevice.DeviceId)
                        {
                            contain = true;
                        }
                    }
                    if (!contain)
                    {
                        byte[] _Bytes1 = BitConverter.GetBytes(currentDevice.BluetoothAddress);
                        Array.Reverse(_Bytes1);
                        // The received signal strength indicator (RSSI)
                        double rssi = eventArgs.RawSignalStrengthInDBm;
                        DeviceList.Add(currentDevice);
                            MessAgeChanged(MsgType.NotifyTxt, currentDevice.Name + "        " + BitConverter.ToString(_Bytes1, 2, 6).Replace('-', ':').ToLower() + "           " + rssi);
                            DeviceWatcherChanged(MsgType.BleDevice, currentDevice);
                    }
                }
            }
        };
    }