在我的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 ...
答案 0 :(得分:0)
十六进制代码是NSData
,您可以从these文档中看到。要将其放入字符串中,我将使用以下内容。
NSData data = NSData.FromData(theValueFromDictionary);
string uuidString = data.ToString();
//Try this if the other line doesn't work. But string encoding should be UTF-16 (the default) or UTF-8
//string uuidString = data.ToString(NSStringEncoding.UTF8);
如果这不是您想要的字符串,那么您可以尝试使用所使用的编码类型,但是以我的经验,苹果通常使用UTF-8
在数据和字符串之间切换。
也许UUID是此词典中的另一个键。看看所有可用的键here
答案 1 :(得分:0)
您可以在广告数据中获取制造商信息。 遵循此代码。
#pragma mark - CBCentralManagerDelegate
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI {
NSString *manufacturer = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
NSLog(@"manufacturer:%@", manufacturer);
}