【发布时间】:2019-03-11 15:56:20
【问题描述】:
在我的 Xamarin.Android 应用中,我可以使用以下代码从 BLE 读取制造商数据:
public class CustomScanCallback : ScanCallback
{
public override void OnScanResult([GeneratedEnum] ScanCallbackType callbackType, ScanResult result)
{
base.OnScanResult(callbackType, result);
if (result.ScanRecord.ManufacturerSpecificData != null)
{
var dataByteResult = result.ScanRecord.GetManufacturerSpecificData(0xFFFE);
if (dataByteResult != null)
{
Guid dataResult = new Guid(dataByteResult);
if (dataResult.ToString() == "myUuid")
{
// found the uuid from my UWP app
}
}
}
}
}
如何在 Xamarin.iOS 上做同样的事情?当外围设备被发现时,我有一个回调:
_cbCentralManager.DiscoveredPeripheral += CBCentralManager_DiscoveredPeripheral;
private void CBCentralManager_DiscoveredPeripheral(object sender, CBDiscoveredPeripheralEventArgs e)
{
// how to find "myUuid" ?
}
并且尝试了很多方法来找到它,但找不到。 Swift/Obective-C 中的答案也会有所帮助,因为我可以将其翻译成 C#。
编辑
我用键CBAdvertisementDataManufacturerDataKey查看了广告数据参数,找到了值:
<06000109 2002aa4e 7e54b91f 2212c398 74eb0fe9 9fc3ecce 4ce76d8f aa>
看起来它是用十六进制格式编码的,但不要以为我要找的是我的 uuid...
【问题讨论】:
-
developer.apple.com/documentation/corebluetooth/… 应该被调用。然后,在
advertisementData字典参数中,应该有一个制造商的键(CBAdvertisementDataManufacturerDataKey)/值。我不记得该值是NSString还是NSData类型,但你应该得到它。 -
我编辑了我的帖子
-
查看此链接。 developer.apple.com/documentation/corebluetooth/…你试过
CBAdvertisementDataServiceUUIDsKey吗? -
developer.apple.com/documentation/corebluetooth/… 如果你看这里是 NSData,所以你需要创建 NSData 对象,然后从中创建一个字符串。
-
您可以查看以下链接,它可能对您有所帮助。 stackoverflow.com/a/22837799/4843725 或者如果它不起作用,那么检查这个。 stackoverflow.com/a/35059094/4843725