2014-04-14 2 views
1

나는 Xamarin.Ios 블루투스 응용 프로그램을 만드는 오전 내 질문은 다음됩니다 :peripheral.DiscoverCharacteristic 방법 - 자 마린

한 번 주변에있는 모든 서비스의 특성을 발견 할 수있는 방법이 있습니까. 내가 세 가지 서비스 (a, b, c)를 갖고 있고 peripheral.discoverCharacteristic (a)를 호출했는지 말하려합니다. 세 번 a, b, c를 수행 한 다음 모든 서비스의 모든 발견 된 특성의 특성을 발견하여 특성 호출을 수신합니다. 나는 내가 전화 할 때마다 내가 할 수있는 것을 알고있다. peripheral.discovercharacteristic() 그러나 나는 모든 서비스의 모든 특성을 발견해야 할 필요가있다. 이것은 내 사용 요구 사항입니다. 도와주세요!

답변

1

직접 해결할 수 없습니다.

단일 서비스마다 하나의 DiscoverCharacteristic 호출을 사용하고 사용자 정의 응용 프로그램 논리를 사용하여 결과를 처리해야합니다.

0

CBPeripheral 서비스를 찾았을 때 으로 전화를 걸어 을 모두 내가 찾고있는 특성;

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 method를 하나씩 호출하는 데 어려움을 겪고있다. 처음에 내가 peripheral.discovercharacteristic (service-a)를 호출했을 때 discovercharacteristic 메소드에서 콜백을 받았지만이 후에 두 번째 서비스 (b)에 대한 특성을 발견하려고 시도했을 때 콜백을 다시하지 않았습니다. –

0

좋아, xamarin에서는 배치 검색과는 달리 서비스 특성을 검색하는 기능 만 수행합니다. Etan이 첫 번째 대답에서 설명한대로 특정 서비스의 특성을 하나씩 발견하여 처리하고 다음 서비스를 다시 찾아야합니다. 그것은 나를 위해 작동하며 이에 따라 유스 케이스 요구 사항을 변경하는 것을 생각할 것입니다. 생각을 공유해 주신 모든 분께 감사드립니다.