UWP应用中的多个广告

时间:2017-04-20 10:59:45

标签: c# bluetooth uwp

我正在尝试在c#中的UWP应用中发布多个播放广告。我可以将2个制造商数据添加到一个发布者,这些数据将被传输。但是,如果我想发布更多数据是不可能的。这甚至可能吗?

到目前为止的示例代码:

var publisher = new BluetoothLEAdvertisementPublisher();
publisher.Advertisement.ManufacturerData.Add(CreateData("Test");
publisher.Advertisement.ManufacturerData.Add(CreateData("AnotherTest");
publisher.start();

BluetoothLEManufacturerData CreateData(string data)
{
    var dataWriter = new DataWriter();
    dataWriter.WriteInt32(data.Length);
    dataWriter.WriteString(data);

    return new BluetoothLEManufacturerData(0xFFFE, dataWriter.DetachBuffer());
}

试图添加另一个制造商数据,但我得到一个例外 尝试了多个蓝牙适配器,但Windows似乎没有启动第二个适配器。 还尝试了多个Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementPublisher,但也没有做到这一点

1 个答案:

答案 0 :(得分:1)

我们可以将多个制造商数据放在一个BluetoothLE广告中。但请注意,广告有效负载的最大长度为 31字节

参考广告和扫描响应数据格式(蓝牙规范4.0版[第3卷]第375页)

  

广告数据和扫描响应数据的格式如图所示   11.1。数据由重要部分和非重要部分组成。该   重要部分包含一系列AD结构。每个AD结构都应该   具有一个八位字节的长度字段,其中包含长度值和数据   长度八位字节的字段。数据字段的第一个八位字节包含AD类型字段。数据字段中剩余长度 - 1个八位字节的内容取决于AD类型字段的值,称为AD数据。非必要部分在必要时扩展广告和扫描响应数据   包含全零八位字节。   enter image description here

BluetoothLEManufacturerData是AD类型为0xFF的AD结构之一 enter image description here

对于您的第一个制造商数据("idb[splitline.pop(1)] = splitline"),其长度为1(长度)+ 1(类型)+ 2(公司ID)+ 8(您的特定数据),即12个字节。对于第二个制造商数据,其长度为19(1 + 1 + 2 + 15)字节。利用这两个制造商数据,广告有效载荷已经是31个字节。当您尝试添加其他制造商数据时,这就是您获得例外的原因。实际上,如果您在日期中添加一个字符,例如使用CreateData("Test")而不是CreateData("Test="),则还会出现CreateData("Test")错误。

确保缓冲区长度符合广告有效负载。只要长度小于31个字节,就可以放置多个制造商数据。

Invalid advertisement payload detected