9

, tôi có một ứng dụng quét và kết nối với thiết bị 'bluetooth le' theo ios 6.0.1 nhưng trên iphone 4s và nó hoạt động tốt. khi tải lên các ứng dụng đến các cửa hàng apple, họ trả lại cho tôi một ứng dụng sụp đổ, lập trình dơi, nhưng tôi chỉ hiểu sự sụp đổ khi tôi thử các ứng dụng trên một iPhone5 nơiCBperipheral uuid là null trong ios 6.0.1 trên i-phone5

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI; 

trả lại cho tôi một ngoại vi với uuid rỗng .

Tôi in ngoại vi, tên, uuid, rssi và advertData, mọi thứ đều tốt nhưng uuid là rỗng và tôi sử dụng uuid trong ứng dụng. điều này làm cho ứng dụng của tôi gặp sự cố, tôi có thể kiểm soát uuid rỗng và điều này có nghĩa là tôi không thể kiểm soát ứng dụng.

Ai đó biết điều gì sẽ xảy ra và giải pháp khả thi?

+0

giải pháp porssible là tiếp theo. – Manelonix

+0

Tôi tìm thấy giải pháp, yêu cầu uuid sau khi dịch vụ được đọc. Chỉ khi kết nối được stablished bạn có thể biết và tham khảo các uuid của thiết bị ... xem bạn sớm – Manelonix

+0

Tôi có mã sử dụng cuộc gọi này trở lại, khi chạy trên iPad, tôi nhận được một periferial.UUI không bil, nhưng nó là null trên iPhone 6.0.1 –

Trả lời

2

Điều chúng ta phải làm là tiếp theo: Bạn không thể ghi đối tượng ngoại vi bằng NSLog, nhưng chúng tôi không thể có thuộc tính uuid ngoại vi trước khi kết nối được thực thi. Nó luôn luôn là vô giá trị. Chúng tôi yêu cầu uuid khi các dịch vụ đọc được hoàn tất, không phải trước đây, và sau đó chúng tôi không thể chạy các ứng dụng trên i-phone5 mà không gặp sự cố.

Tôi đọc nó về TI (dụng cụ texas) rằng đó là lỗi ios, nhưng tôi biết đó là bản cập nhật bảo mật, chúng tôi cần kết nối trước khi hỏi trước uuid.

1

Sau lần kết nối đầu tiên, UUID được thiết bị nhớ/lưu vào bộ nhớ cache. Nếu cùng một thiết bị ngoại vi được phát hiện sau này, UUID sẽ có sẵn trước khi kết nối. Bạn có thể yêu cầu tất cả các thiết bị ngoại vi nhớ bằng cách gọi "retrievePeripherals".

0

Dường như đây là tính năng sửa lỗi/tính năng trong iOS 6, điều này làm cho bản thân rõ ràng hơn trên iPhone 5 mà tôi nghĩ do tính chất không đồng bộ của mã. Tôi cũng có mã hoạt động trên 4S nhưng không có trên 5.

Cách giải quyết được hầu hết mọi người đăng là đảm bảo bạn kết nối với mọi thiết bị bạn tìm thấy khi tìm thấy. Lời giải thích là UUID không được gán cho đến khi kết nối được thực hiện.

Bạn có thể thấy một ví dụ về điều này trong mã thẻ cảm biến TI mà bạn có thể tải về từ trang web của TI

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 

    NSLog(@"Found a BLE Device : %@",peripheral); 

    /* iOS 6.0 bug workaround : connect to device before displaying UUID ! 
     The reason for this is that the CFUUID .UUID property of CBPeripheral 
     here is null the first time an unkown (never connected before in any app) 
     peripheral is connected. So therefore we connect to all peripherals we find. 
    */ 

    peripheral.delegate = self; 
    [central connectPeripheral:peripheral options:nil]; 

    [self.nDevices addObject:peripheral]; 

} 

Tuy nhiên cần lưu ý rằng bạn cũng có thể làm như sau

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    NSLog(@"didDiscoverPeripheral"); 

    if (![foundPeripherals containsObject:peripheral]) { 
     NSLog(@"foundPeripherals addObject %@", peripheral.name); 
     [foundPeripherals addObject:peripheral]; 
    } else { 
     NSInteger index = [foundPeripherals indexOfObject:peripheral]; 
     NSLog(@"foundPeripherals replaceObject %@", peripheral.name); 
     [foundPeripherals replaceObjectAtIndex:index withObject:peripheral]; 
    } 

} 

như didDiscoverPeripheral được gọi nhiều lần cho mỗi thiết bị (tôi thấy nó được gọi hai lần trên iPhone 5) và lần thứ hai các chi tiết thiết bị ngoại vi hoàn tất.

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