【问题标题】:Bluetooth Low-energy Advertising Data Restriction in Windows 10 API [closed]Windows 10 API 中的蓝牙低功耗广告数据限制 [关闭]
【发布时间】:2016-10-24 20:59:58
【问题描述】:

我遇到了来自 Windows 10 蓝牙低功耗 (BLE) API 的 BluetoothLEAdvertisementDataSection.BluetoothLEAdvertisementDataSection class 问题。

如果我使用此代码检查IBuffer 成员Data 的长度:

 var myDataSection = new BluetoothLEAdvertisementDataSection();
 Debug.WriteLine($"Data Capacity: {myDataSection.Data.Capacity}"); //Looks like SO needs to update for C# 6.0

我得到了预期的输出:

数据容量:29

有关 BLE 数据包的更多信息,我建议访问 this great blog post

现在假设我声明了一个名为 myPayloadbyte[],它有 29 个字节长。以下代码抛出异常:

 DataWriter writer = new DataWriter();
 writer.WriteBytes(myPayload);
 myDataSection.Data = writer.DetachBuffer(); //throws ArgumentException

ArgumentException 很有帮助的建议

“值不在预期范围内。”

事实上,myPayload 的任何大小 20+ 字节 都会导致相同的错误。但是,如果我将其设为 19 字节 长,则不会出错。

是的,当this answer 没有帮助时,我非常沮丧。

【问题讨论】:

    标签: c# windows bluetooth-lowenergy


    【解决方案1】:

    这真的很难过……但实际上我只是算错了我添加的字节数。 29 字节 确实有效。 30 没有。 这不是 API 问题。

     static readonly byte[] myPayload =  
    {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes
     0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes
     0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes
     0x00,0x00,0x00,0x00,0x00}; //5 bytes Total:29 bytes            
    

    ...会正常工作的。

    【讨论】:

    • 将来在类似情况下,您可能会受益于在声明static readonly byte[29] myPayload = ...中指定数组的长度
    • @Daniel 我喜欢这个想法,但您的语法需要稍作修改:static readonly byte[] myPayload = new byte[29]{/* 29 bytes of data here */}
    • 我没有测试它的语法并不奇怪,但你明白了这个想法。更多选项可以查看All possible C# array initialization syntaxes
    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多