【问题标题】:How to advertise Eddystone URL frame using Windows 10 BLE API如何使用 Windows 10 BLE API 宣传 Eddystone URL 框架
【发布时间】:2015-10-25 19:35:10
【问题描述】:

网址框架规范:https://github.com/google/eddystone/tree/master/eddystone-url

我在宣传 Eddystone URL 框架时遇到了问题。我正在使用以下代码,但 Eddystone 信标扫描仪无法识别它。

byte[] data;
string url = "http://test.com";

var urlSchemeByte = EddystoneUrlFrame.EncodeUrlScheme(url);
var header = new byte[] { 0xAA, 0xFE, 0x10 };
using (var memoryStream = new MemoryStream())
{
    memoryStream.Write(header, 0, header.Length);

    // ranging data
    memoryStream.WriteByte(220);

    memoryStream.WriteByte((byte)urlSchemeByte);
    EddystoneUrlFrame.EncodeUrlToStream(url,EddystoneUrlFrame.UrlSchemeDictionary[(byte)urlSchemeByte].Length,memoryStream);

    data = memoryStream.ToArray();
}

var writer = new DataWriter();
writer.WriteBytes(data);

var advertisementData = new BluetoothLEAdvertisementDataSection();
advertisementData.Data = writer.DetachBuffer();
publisher.Advertisement.DataSections.Add(advertisementData);

我做错了什么?

【问题讨论】:

    标签: c# bluetooth windows-10 eddystone


    【解决方案1】:

    Eddystone URL 在设计上仅支持 HTTPS。

    http : // 测试。 com 必须是 https : // 测试。 com

    尝试一个网址缩短器并再次测试。 https://goo。 gl/

    【讨论】:

      【解决方案2】:

      尝试在标题前添加:

      1. 服务数据PDU的PDU类型和长度:

        0x0D, 0x16
        
      2. 在上述之前,放上 16 位服务广告 PDU 的 PDU 类型和长度,以及服务 UUID:

        0x03, 0x03, 0xAA, 0xFE
        

      所以它应该是这样的:

      var header = new byte[] { 0x03, 0x03, 0xAA, 0xFE, 0x0D, 0x16, 0xAA, 0xFE, 0x10 };
      

      我没有使用 Windows API 的经验,所以我可能错了以这种方式指定这些字节。但不知何故,它们需要在传输中才能正确检测。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 2018-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多