2014-04-14 78 views
1

我创建一个Xamarin.Ios蓝牙应用程序,我的问题是以下几点:peripheral.DiscoverCharacteristic方法蓝牙核心 - Xamarin

有什么办法可以一次发现在周边的所有服务的特点。我的意思是说如果我有三个服务(a,b,c),并且我称之为peripheral.discoverCharacteristic(a); 三次a,b,c然后在发现所有发现的所有服务特征的特征中接收到特征回调。我知道每次打电话给peripheral.discovercharacteristic()时都可以打回电话,但我需要在我做任何事情之前从所有服务中发现所有特征。这是我的使用要求。 请帮忙!

回答

1

不可能直接。

您将不得不为每个服务使用一次DiscoverCharacteristic调用,然后使用自定义应用程序逻辑处理结果。

0

当我发现一个CBPeripheral的服务时,我打电话discoverCharacteristics一次全部我正在寻找的特性;

for (CBService *service in peripheral.services) 
{ 
    DDLogInfo(@"Kicking discovery of characteristics for servive %@", service); 
    [peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:CHARACTERISTIC_A], 
              [CBUUID UUIDWithString:CHARACTERISTIC_B], 
              [CBUUID UUIDWithString:CHARACTERISTIC_C], 
              [CBUUID UUIDWithString:CHARACTERISTIC_D]] 
          forService:service]; 
} 

然后,在didDiscoverCharacteristicsForService:error:,我遍历发现结果和存储引用到我需要后来的特点,就是这样。

for (CBCharacteristic *characteristic in service.characteristics) 
{ 
    if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:CHARACTERISTIC_A]]) 
     self.currentCharacteristicA = characteristic; 
    else if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:CHARACTERISTIC_B]]) 
     self.currentCharacteristicB = characteristic; 
    else if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:CHARACTERISTIC_C]]) 
     self.currentCharacteristicC = characteristic; 
    else if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:CHARACTERISTIC_D]]) 
     self.currentCharacteristicD = characteristic; 
} 

而且,很明显,清理self.currentCharacteristic *恰当时断开连接。

+0

我想Xamarin接口比CoreBluetooth更严格,并且不可能批量发现请求。 – allprog

+0

如此真实 - 我刚才意识到问题在于Xamarin,而不是原生iOS。我的错。不理我! –

+0

嗨马库斯,我现在正以正确的方式尝试。由于我有三个发现的服务a,b,c,但我很难一个接一个地调用peripheral.discovercharacteristic方法。首先,当我打电话给peripheral.discovercharacteristic(对于服务 - a),然后我在发现特征方法中接到回电,但在此之后,当我尝试发现第二服务的特征(b)时,它没有回拨电话, –

0

好的,在xamarin中它只适用于发现服务的特性,而不是批量发现。我将需要逐个发现特定服务的特征,然后处理它并再次发现下一个服务,如Etan在第一个答案中所解释的。它适用于我,并会考虑相应地更改我的用例需求。感谢大家分享你的想法。