[英]peripheral.DiscoverCharacteristic Method in Core Bluetooth - Xamarin
我正在創建一個Xamarin.Ios藍牙應用程序,我的問題如下:
是否有任何方法可以立即發現外圍設備中所有服務的特征。 我的意思是說我是否有三個服務(a,b,c),並且我呼叫了peripheral.discoverCharacteristic(a); 然后,在所有服務的所有已發現特征中發現特征回叫a,b,c的三個時間。 我知道每當我調用peripheral.discovercharacteristic()時它都可以進行回調,但是我需要在執行任何操作之前從所有服務中發現所有特征。 這是我的使用要求。 請幫忙 !
無法直接進行。
您將必須為每個服務使用一個DiscoverCharacteristic調用,然后使用自定義應用程序邏輯處理結果。
當我發現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:
,我遍歷發現的結果並存儲對以后將需要的特性的引用,僅此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 *。
好的,在xamarin中,它僅適用於針對服務的特征發現,而不像批處理發現。 我將需要一一發現給定服務的特征,並對其進行處理,然后再次發現下一個服務的特征,如Etan在第一個答案中所述。 它對我有用,並且會考慮相應地更改用例需求。 感謝大家分享您的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.