2014-04-14 73 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在第一個答案中所解釋的。它適用於我,並會考慮相應地更改我的用例需求。感謝大家分享你的想法。