2014-11-27 14 views
5

Tiếp theo kết nối với một thiết bị BLE được quảng cáo một dịch vụ cụ thể Tôi quan tâm đến, nhằm phát hiện các dịch vụ này, tôi kêu gọi:iOS lõi Bluetooth: dịch vụ Đã quảng cáo không được phát hiện trên ngoại vi

[self.peripheral discoverServices:@[[self.class serviceUUID]]]; 

Phương thức ủy nhiệm - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error được gọi là không có lỗi, nhưng số lượng dịch vụ trả lại cho thiết bị ngoại vi là 0, và do đó không có đặc điểm nào được phát hiện thêm. Có ai có bất kỳ ý tưởng tại sao điều này đang xảy ra? Cảm ơn trước!

Dưới đây là toàn bộ nội dung của phương thức đại biểu.

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { 
    if (error) { 
     NSLog(@"didDiscoverServices failed: %@", error); 
     return; 
    } 

    NSLog(@"didDiscoverServices succeeded for peripheral: %@.", peripheral.name); 
    NSLog(@"Number of services: %d", peripheral.services.count); 

    for (CBService *s in peripheral.services) { 
     NSLog (@"Discovered service UUID: %@", s.UUID); 
     if ([s.UUID isEqual:[self.class serviceUUID]]) { 
      NSLog(@"Discover characteristics..."); 
      [self.peripheral discoverCharacteristics:@[[self.class controlPointCharacteristicUUID], [self.class packetCharacteristicUUID]] forService:s]; 
     } 
    } 
} 

Giao diện điều khiển cho thấy:

2014-11-27 15:54:51.933 k[197:13362] didDiscoverServices succeeded for peripheral: BootK 
2014-11-27 15:54:51.934 k[197:13362] Number of services: 0 
+1

Thiết bị ngoại vi của bạn là gì? Bạn đã thử một cái gì đó giống như các ứng dụng LightBlue từ cửa hàng ứng dụng để xem nếu nó có thể khám phá các dịch vụ? Bạn đã thử quét tìm 'nil' thay vì các dịch vụ cụ thể để xem điều gì sẽ xảy ra? – Paulw11

+0

Nó hoạt động với LightBlue. Quá trình quét cho 'nil' không giải quyết được vấn đề. Tôi đã thử sử dụng một số mã mẫu mới nhất được cung cấp bởi Nordic, thay vì mã mẫu cũ sử dụng các khối ở trên và bây giờ nó hoạt động :) Cảm ơn – Gina

Trả lời

0

Điều duy nhất tôi có thể nghĩ đến là [self.class serviceUUID] không phù hợp với UUID của dịch vụ mà bạn đang tìm kiếm. Khi bạn bắt đầu quét, bạn có đang lọc theo UUID dịch vụ không?

[self.centralManager scanForPeripheralsWithServices:[self.class serviceUUID] options:nil]; 

Nếu không, điều đó có thể giải thích tại sao bạn có thể khám phá và kết nối với nó, nhưng không phát hiện ra dịch vụ cụ thể đó.

Các vấn đề liên quan